Skip to content

Commit 3d569d7

Browse files
committed
add ResourceOpenedListener so interested parties can find out what caused a file to be opened
1 parent 6738310 commit 3d569d7

File tree

8 files changed

+55
-3
lines changed

8 files changed

+55
-3
lines changed

app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/ActionUtil.java

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import org.phoebus.framework.macros.MacroOrSystemProvider;
3232
import org.phoebus.framework.macros.MacroValueProvider;
3333
import org.phoebus.framework.macros.Macros;
34+
import org.phoebus.ui.application.ResourceOpenedNotifierService;
3435

3536
/** Action Helper
3637
* @author Kay Kasemir

app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayNavigation.java

+3
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import java.util.concurrent.CopyOnWriteArrayList;
1414
import java.util.stream.Collectors;
1515

16+
import org.phoebus.ui.application.ResourceOpenedNotifierService;
1617
import org.phoebus.ui.undo.SizeLimitedStack;
1718

1819
/** Navigate backward/forward between displays
@@ -99,6 +100,7 @@ public DisplayInfo goBackward(int count)
99100
if (current != null)
100101
forwardStack.push(current);
101102
current = backwardStack.pop();
103+
ResourceOpenedNotifierService.notifyListeners(current.getPath(), "BackButton");
102104
}
103105
notifyListeners();
104106
return current;
@@ -115,6 +117,7 @@ public DisplayInfo goForward(int count)
115117
if (current != null)
116118
backwardStack.push(current);
117119
current = forwardStack.pop();
120+
ResourceOpenedNotifierService.notifyListeners(current.getPath(), "ForwardButton");
118121
}
119122
notifyListeners();
120123
return current;

app/display/runtime/src/main/java/org/csstudio/display/builder/runtime/app/DisplayRuntimeInstance.java

+3
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.phoebus.framework.persistence.Memento;
3636
import org.phoebus.framework.spi.AppDescriptor;
3737
import org.phoebus.framework.spi.AppInstance;
38+
import org.phoebus.ui.application.ResourceOpenedNotifierService;
3839
import org.phoebus.ui.dialog.ExceptionDetailsErrorDialog;
3940
import org.phoebus.ui.docking.DockItem;
4041
import org.phoebus.ui.docking.DockItemWithInput;
@@ -67,6 +68,7 @@ public class DisplayRuntimeInstance implements AppInstance
6768
/** Memento tags */
6869
private static final String TAG_ZOOM = "ZOOM";
6970
private static final String TAG_TOOLBAR = "toolbar";
71+
private static final String RESTORED = "restored";
7072

7173
/** Global tracker of last user's decision to show toolbar.
7274
* Used when opening new display
@@ -237,6 +239,7 @@ public void restore(final Memento memento)
237239
zoom_action.getOnAction().handle(null);
238240
});
239241
memento.getBoolean(TAG_TOOLBAR).ifPresent(this::showToolbar);
242+
ResourceOpenedNotifierService.notifyListeners(dock_item.getInput().toString(), RESTORED);
240243
}
241244

242245
@Override

app/filebrowser/src/main/java/org/phoebus/applications/filebrowser/FileBrowserController.java

+6-2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.phoebus.ui.application.ApplicationLauncherService;
3535
import org.phoebus.ui.application.ContextMenuService;
3636
import org.phoebus.ui.application.PhoebusApplication;
37+
import org.phoebus.ui.application.ResourceOpenedNotifierService;
3738
import org.phoebus.ui.dialog.DialogHelper;
3839
import org.phoebus.ui.javafx.ImageCache;
3940
import org.phoebus.ui.spi.ContextMenuEntry;
@@ -179,14 +180,17 @@ private void assertTreeDoesntContain(final TreeItem<FileInfo> item, final Path f
179180
}
180181

181182
/**
182-
* Try to open resource, show error dialog on failure
183+
* Try to open resource, tell listeners on success, show error dialog on failure
183184
*
184185
* @param file Resource to open
185186
* @param stage Stage to use to prompt for specific app.
186187
* Otherwise <code>null</code> to use default app.
187188
*/
188189
private void openResource(final File file, final Stage stage) {
189-
if (!ApplicationLauncherService.openFile(file, stage != null, stage)) {
190+
if (ApplicationLauncherService.openFile(file, stage != null, stage)) {
191+
Platform.runLater(() -> ResourceOpenedNotifierService.notifyListeners(file.getAbsolutePath(), FileBrowserApp.Name));
192+
}
193+
else{
190194
final Alert alert = new Alert(AlertType.ERROR);
191195
alert.setHeaderText(Messages.OpenAlert1 + file + Messages.OpenAlert2);
192196
DialogHelper.positionDialog(alert, treeView, -300, -200);

app/ux-analytics/monitor/pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,12 @@
6969
<version>4.7.4-SNAPSHOT</version>
7070
<scope>compile</scope>
7171
</dependency>
72+
<dependency>
73+
<groupId>org.phoebus</groupId>
74+
<artifactId>app-filebrowser</artifactId>
75+
<version>4.7.4-SNAPSHOT</version>
76+
<scope>compile</scope>
77+
</dependency>
7278
<dependency>
7379
<groupId>org.apache.httpcomponents</groupId>
7480
<artifactId>httpclient</artifactId>

core/ui/src/main/java/org/phoebus/ui/application/PhoebusApplication.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -885,7 +885,10 @@ private void createTopResourcesMenu() {
885885
final URI resource = tops.getResource(i);
886886

887887
menu_items[i] = new MenuItem(description);
888-
menu_items[i].setOnAction(event -> openResource(resource, false));
888+
menu_items[i].setOnAction(event -> {
889+
openResource(resource, false);
890+
ResourceOpenedNotifierService.notifyListeners(resource.getPath(),"TopResources");
891+
});
889892

890893
toolbar_items[i] = new MenuItem(description);
891894
toolbar_items[i].setOnAction(event -> openResource(resource, false));
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.phoebus.ui.application;
2+
3+
public interface ResourceOpenedListener {
4+
5+
public void notifyResourceOpened(String resourceName, String fromWho);
6+
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.phoebus.ui.application;
2+
3+
import java.net.URI;
4+
import java.util.ArrayList;
5+
import java.util.List;
6+
7+
public class ResourceOpenedNotifierService {
8+
9+
static final List<ResourceOpenedListener> listeners = new ArrayList<>();
10+
11+
public static void addListener(ResourceOpenedListener listener) {
12+
listeners.add(listener);
13+
}
14+
15+
public static void removeListener(ResourceOpenedListener listener) {
16+
listeners.remove(listener);
17+
}
18+
19+
public static void notifyListeners(String resourceName, String fromWho) {
20+
for (ResourceOpenedListener listener : listeners) {
21+
listener.notifyResourceOpened(resourceName, fromWho);
22+
}
23+
}
24+
25+
}

0 commit comments

Comments
 (0)