Skip to content

Commit 83f6548

Browse files
committed
Merge commit 'refs/pull/5143/head' of github.com:gchq/stroom
2 parents c6cb62d + d9e3a83 commit 83f6548

File tree

10 files changed

+403
-5
lines changed

10 files changed

+403
-5
lines changed

stroom-core-client/src/main/java/stroom/data/client/presenter/ProcessorTaskSummaryPresenter.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import stroom.processor.shared.ProcessorTaskFields;
3434
import stroom.processor.shared.ProcessorTaskResource;
3535
import stroom.processor.shared.ProcessorTaskSummary;
36+
import stroom.query.api.ExpressionOperator;
3637
import stroom.util.client.DataGridUtil;
3738
import stroom.util.shared.ModelStringUtil;
3839
import stroom.util.shared.ResultPage;
@@ -160,22 +161,18 @@ public MultiSelectionModel<ProcessorTaskSummary> getSelectionModel() {
160161

161162
private void setPipeline(final DocRef pipeline) {
162163
criteria.setExpression(ProcessorTaskExpressionUtil.createPipelineExpression(pipeline));
163-
refresh();
164164
}
165165

166166
private void setFeed(final DocRef feed) {
167167
criteria.setExpression(ProcessorTaskExpressionUtil.createFeedExpression(feed));
168-
refresh();
169168
}
170169

171170
private void setFolder(final DocRef folder) {
172171
criteria.setExpression(ProcessorTaskExpressionUtil.createFolderExpression(folder));
173-
refresh();
174172
}
175173

176174
private void setNullCriteria() {
177175
criteria.setExpression(null);
178-
refresh();
179176
}
180177

181178
@Override
@@ -189,6 +186,8 @@ public void read(final DocRef docRef, final Object document, final boolean readO
189186
} else {
190187
setNullCriteria();
191188
}
189+
190+
refresh();
192191
}
193192

194193
public void refresh() {
@@ -227,4 +226,9 @@ protected void changeData(final ResultPage<ProcessorTaskSummary> data) {
227226
dataProvider.refresh();
228227
}
229228
}
229+
230+
public void setExpression(final ExpressionOperator expressionOperator) {
231+
criteria.setExpression(expressionOperator);
232+
refresh();
233+
}
230234
}

stroom-core-client/src/main/java/stroom/pipeline/client/gin/PipelineModule.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,10 @@
7373
import stroom.processor.client.view.BatchProcessorFilterEditViewImpl;
7474
import stroom.processor.client.view.ProcessorEditViewImpl;
7575
import stroom.processor.client.view.ProcessorViewImpl;
76+
import stroom.processor.task.client.ProcessorTaskPlugin;
77+
import stroom.processor.task.client.presenter.ProcessorTaskPresenter;
78+
import stroom.processor.task.client.presenter.ProcessorTaskPresenter.ProcessorTaskView;
79+
import stroom.processor.task.client.view.ProcessorTaskViewImpl;
7680

7781
import com.google.inject.Singleton;
7882

@@ -122,6 +126,10 @@ protected void configure() {
122126
BatchProcessorFilterEditView.class,
123127
BatchProcessorFilterEditViewImpl.class);
124128

129+
bindPlugin(ProcessorTaskPlugin.class);
130+
bindPresenterWidget(ProcessorTaskPresenter.class, ProcessorTaskView.class,
131+
ProcessorTaskViewImpl.class);
132+
125133
bind(EditorMenuPresenter.class).in(Singleton.class);
126134
}
127135
}

stroom-core-client/src/main/java/stroom/processor/client/presenter/ProcessorPresenter.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import stroom.processor.shared.ProcessorListRow;
3535
import stroom.processor.shared.ProcessorType;
3636
import stroom.processor.shared.QueryData;
37+
import stroom.processor.task.client.event.OpenProcessorTaskEvent;
3738
import stroom.query.api.ExpressionOperator;
3839
import stroom.query.api.datasource.QueryField;
3940
import stroom.query.client.ExpressionTreePresenter;
@@ -91,6 +92,7 @@ public class ProcessorPresenter
9192
// private ButtonView permissionsButton;
9293
private ButtonView filterButton;
9394
private ButtonView batchEditButton;
95+
private ButtonView showTasksButton;
9496

9597
private boolean allowCreate;
9698
private boolean allowUpdate;
@@ -223,6 +225,16 @@ private void createButtons() {
223225
}));
224226
}
225227

228+
showTasksButton = processorListPresenter.getView().addButton(new Preset(
229+
SvgImage.JOBS,
230+
"Show Tasks",
231+
true));
232+
registerHandler(showTasksButton.addClickHandler(e -> {
233+
if (MouseUtil.isPrimary(e)) {
234+
showTasksTab();
235+
}
236+
}));
237+
226238
enableButtons(false);
227239
}
228240
}
@@ -235,6 +247,13 @@ private void onBatchEdit() {
235247
processorListPresenter::refresh);
236248
}
237249

250+
private void showTasksTab() {
251+
final ProcessorListRow selectedProcessor = processorListPresenter.getSelectionModel().getSelected();
252+
if (selectedProcessor instanceof final ProcessorFilterRow processorFilterRow) {
253+
OpenProcessorTaskEvent.fire(this, processorFilterRow.getProcessorFilter());
254+
}
255+
}
256+
238257
private void onFilter() {
239258
final ExpressionPresenter presenter = filterPresenterProvider.get();
240259
final HidePopupRequestEvent.Handler handler = e -> {
@@ -264,12 +283,14 @@ private void onFilter() {
264283
}
265284

266285
private void enableButtons(final boolean enabled) {
286+
final boolean onlyOneRowSelected = processorListPresenter.getSelectionModel().getSelectedItems().size() == 1;
287+
267288
if (addButton != null) {
268289
addButton.setEnabled(allowUpdate);
269290
}
270291
if (editButton != null) {
271292
if (allowUpdate) {
272-
editButton.setEnabled(enabled);
293+
editButton.setEnabled(enabled && onlyOneRowSelected);
273294
} else {
274295
editButton.setEnabled(false);
275296
}
@@ -295,6 +316,9 @@ private void enableButtons(final boolean enabled) {
295316
// permissionsButton.setEnabled(false);
296317
// }
297318
// }
319+
if (showTasksButton != null) {
320+
showTasksButton.setEnabled(enabled && onlyOneRowSelected);
321+
}
298322
}
299323

300324
@Override
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package stroom.processor.task.client;
2+
3+
import stroom.core.client.ContentManager;
4+
import stroom.data.client.AbstractTabPresenterPlugin;
5+
import stroom.processor.shared.ProcessorFilter;
6+
import stroom.processor.task.client.event.OpenProcessorTaskEvent;
7+
import stroom.processor.task.client.presenter.ProcessorTaskPresenter;
8+
9+
import com.google.inject.Inject;
10+
import com.google.inject.Provider;
11+
import com.google.web.bindery.event.shared.EventBus;
12+
13+
import javax.inject.Singleton;
14+
15+
@Singleton
16+
public class ProcessorTaskPlugin extends AbstractTabPresenterPlugin<ProcessorFilter, ProcessorTaskPresenter> {
17+
18+
@Inject
19+
public ProcessorTaskPlugin(final EventBus eventBus,
20+
final ContentManager contentManager,
21+
final Provider<ProcessorTaskPresenter> processorTaskPresenterProvider) {
22+
super(eventBus, contentManager, processorTaskPresenterProvider);
23+
24+
registerHandler(getEventBus().addHandler(OpenProcessorTaskEvent.getType(), event -> {
25+
open(event.getProcessorFilter(), true);
26+
}));
27+
}
28+
29+
public void open(final ProcessorFilter processorFilter, final boolean forceOpen) {
30+
if (processorFilter != null) {
31+
super.openTabPresenter(
32+
forceOpen,
33+
processorFilter,
34+
processorTaskPresenter ->
35+
processorTaskPresenter.setProcessorFilter(processorFilter));
36+
}
37+
}
38+
39+
@Override
40+
protected String getName() {
41+
return "Tasks";
42+
}
43+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package stroom.processor.task.client.event;
2+
3+
import stroom.processor.shared.ProcessorFilter;
4+
import stroom.processor.task.client.event.OpenProcessorTaskEvent.Handler;
5+
6+
import com.google.gwt.event.shared.EventHandler;
7+
import com.google.gwt.event.shared.GwtEvent;
8+
import com.google.gwt.event.shared.HasHandlers;
9+
10+
import java.util.Objects;
11+
12+
public class OpenProcessorTaskEvent extends GwtEvent<Handler> {
13+
14+
private static Type<Handler> TYPE;
15+
private final ProcessorFilter processorFilter;
16+
17+
private OpenProcessorTaskEvent(final ProcessorFilter processorFilter) {
18+
this.processorFilter = Objects.requireNonNull(processorFilter);
19+
}
20+
21+
public static void fire(final HasHandlers handlers, final ProcessorFilter processorFilter) {
22+
handlers.fireEvent(new OpenProcessorTaskEvent(
23+
Objects.requireNonNull(processorFilter, "Processor filter required")));
24+
}
25+
26+
public static Type<Handler> getType() {
27+
if (TYPE == null) {
28+
TYPE = new Type<>();
29+
}
30+
return TYPE;
31+
}
32+
33+
@Override
34+
public Type<Handler> getAssociatedType() {
35+
return getType();
36+
}
37+
38+
@Override
39+
protected void dispatch(final Handler handler) {
40+
handler.onOpen(this);
41+
}
42+
43+
public ProcessorFilter getProcessorFilter() {
44+
return processorFilter;
45+
}
46+
47+
@Override
48+
public String toString() {
49+
return "OpenProcessorTaskEvent{" +
50+
"processorFilter='" + processorFilter + '\'' +
51+
'}';
52+
}
53+
54+
// --------------------------------------------------------------------------------
55+
56+
57+
public interface Handler extends EventHandler {
58+
59+
void onOpen(OpenProcessorTaskEvent event);
60+
}
61+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
/*
2+
* Copyright 2016 Crown Copyright
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package stroom.processor.task.client.presenter;
18+
19+
import stroom.content.client.presenter.ContentTabPresenter;
20+
import stroom.data.client.presenter.ProcessorTaskListPresenter;
21+
import stroom.data.client.presenter.ProcessorTaskSummaryPresenter;
22+
import stroom.processor.shared.ProcessorFilter;
23+
import stroom.processor.shared.ProcessorTaskFields;
24+
import stroom.processor.shared.ProcessorTaskSummary;
25+
import stroom.processor.task.client.presenter.ProcessorTaskPresenter.ProcessorTaskView;
26+
import stroom.query.api.ExpressionOperator;
27+
import stroom.query.api.ExpressionTerm.Condition;
28+
import stroom.svg.shared.SvgImage;
29+
30+
import com.google.inject.Inject;
31+
import com.google.web.bindery.event.shared.EventBus;
32+
import com.gwtplatform.mvp.client.View;
33+
34+
public class ProcessorTaskPresenter extends ContentTabPresenter<ProcessorTaskView> {
35+
36+
public static final String STREAM_TASK_LIST = "STREAM_TASK_LIST";
37+
public static final String STREAM_TASK_SUMMARY = "STREAM_TASK_SUMMARY";
38+
private final ProcessorTaskSummaryPresenter processorTaskSummaryPresenter;
39+
private final ProcessorTaskListPresenter processorTaskListPresenter;
40+
41+
private ProcessorFilter processorFilter;
42+
43+
@Inject
44+
public ProcessorTaskPresenter(final EventBus eventBus,
45+
final ProcessorTaskView view,
46+
final ProcessorTaskSummaryPresenter processorTaskSummaryPresenter,
47+
final ProcessorTaskListPresenter processorTaskListPresenter) {
48+
super(eventBus, view);
49+
this.processorTaskSummaryPresenter = processorTaskSummaryPresenter;
50+
this.processorTaskListPresenter = processorTaskListPresenter;
51+
52+
setInSlot(STREAM_TASK_SUMMARY, processorTaskSummaryPresenter);
53+
setInSlot(STREAM_TASK_LIST, processorTaskListPresenter);
54+
}
55+
56+
@Override
57+
protected void onBind() {
58+
super.onBind();
59+
60+
registerHandler(processorTaskSummaryPresenter.getSelectionModel().addSelectionHandler(event -> {
61+
// Clear the task list.
62+
processorTaskListPresenter.clear();
63+
64+
final ProcessorTaskSummary row = processorTaskSummaryPresenter.getSelectionModel().getSelected();
65+
66+
if (row != null) {
67+
processorTaskListPresenter.setExpression(getExpression(row));
68+
}
69+
}));
70+
}
71+
72+
private ExpressionOperator getExpression(final ProcessorTaskSummary processorTaskSummary) {
73+
final ExpressionOperator.Builder builder = ExpressionOperator.builder();
74+
if (processorTaskSummary != null) {
75+
if (processorTaskSummary.getPipeline() != null) {
76+
builder.addDocRefTerm(ProcessorTaskFields.PIPELINE, Condition.IS_DOC_REF,
77+
processorTaskSummary.getPipeline());
78+
}
79+
if (processorTaskSummary.getFeed() != null) {
80+
builder.addTextTerm(ProcessorTaskFields.FEED, Condition.EQUALS, processorTaskSummary.getFeed());
81+
}
82+
if (processorTaskSummary.getStatus() != null) {
83+
builder.addTextTerm(ProcessorTaskFields.STATUS, Condition.EQUALS,
84+
processorTaskSummary.getStatus().getDisplayValue());
85+
}
86+
}
87+
88+
if (processorFilter != null) {
89+
builder.addIntegerTerm(ProcessorTaskFields.PROCESSOR_FILTER_ID, Condition.EQUALS, processorFilter.getId());
90+
}
91+
92+
return builder.build();
93+
}
94+
95+
public void refresh() {
96+
final ExpressionOperator expressionOperator = getExpression(null);
97+
processorTaskSummaryPresenter.setExpression(expressionOperator);
98+
processorTaskListPresenter.setExpression(expressionOperator);
99+
100+
processorTaskSummaryPresenter.refresh();
101+
processorTaskListPresenter.refresh();
102+
}
103+
104+
public void setProcessorFilter(final ProcessorFilter processorFilter) {
105+
this.processorFilter = processorFilter;
106+
refresh();
107+
}
108+
109+
@Override
110+
public SvgImage getIcon() {
111+
return SvgImage.JOBS;
112+
}
113+
114+
@Override
115+
public String getLabel() {
116+
return "Tasks: Filter " + (processorFilter == null ? "" : processorFilter.getId().toString());
117+
}
118+
119+
@Override
120+
public String getType() {
121+
return "Tasks";
122+
}
123+
124+
public interface ProcessorTaskView extends View { }
125+
}

0 commit comments

Comments
 (0)