Skip to content

Commit ff0a891

Browse files
committed
Fixed syncing mechanism for USS part, continuing to work on the new presentation rework
Signed-off-by: Uladzislau Kalesnikau <[email protected]>
1 parent f493ff9 commit ff0a891

29 files changed

+334
-278
lines changed

src/main/kotlin/org/zowe/explorer/v3/components/files/DatasetMaskNodeDescriptor.kt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,27 @@
66
* SPDX-License-Identifier: EPL-2.0
77
*
88
* Copyright Contributors to the Zowe Project.
9-
*
10-
* Contributors:
11-
* Zowe Community
12-
* Uladzislau Kalesnikau
139
*/
1410

1511
package org.zowe.explorer.v3.components.files
1612

1713
import org.zowe.explorer.v3.icons.ZoweExplorerIcons
1814
import org.zowe.explorer.v3.tree.nodes.Renameable
1915
import org.zowe.explorer.v3.tree.nodes.ExplorerTreeNode
20-
import org.zowe.explorer.v3.tree.nodes.FileFetcherNodeDescriptor
16+
import org.zowe.explorer.v3.tree.nodes.FetcherNodeDescriptor
2117

2218
// TODO: doc
2319
class DatasetMaskNodeDescriptor(
2420
displayName: String,
25-
connectionConfigUuid: String
26-
) : FileFetcherNodeDescriptor(
21+
connectionConfigUuid: String,
22+
override val fetchFilter: String,
23+
override val invalidationElem: String,
24+
override val invalidationPath: List<String>,
25+
override var wasExpanded: Boolean
26+
) : FetcherNodeDescriptor(
2727
displayName,
28+
listOf(),
29+
listOf(),
2830
"Data set mask",
2931
ZoweExplorerIcons.datasetMask,
3032
connectionConfigUuid=connectionConfigUuid
@@ -52,4 +54,8 @@ class DatasetMaskNodeDescriptor(
5254
override fun renameNode() {
5355
TODO("Not yet implemented")
5456
}
57+
58+
override fun expandNode(node: ExplorerTreeNode) {
59+
TODO("Not yet implemented")
60+
}
5561
}

src/main/kotlin/org/zowe/explorer/v3/components/files/FilesExplorerTreeView.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@
66
* SPDX-License-Identifier: EPL-2.0
77
*
88
* Copyright Contributors to the Zowe Project.
9-
*
10-
* Contributors:
11-
* Zowe Community
12-
* Uladzislau Kalesnikau
139
*/
1410

1511
package org.zowe.explorer.v3.components.files

src/main/kotlin/org/zowe/explorer/v3/components/files/FilesWorkingSetNodeDescriptor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ class FilesWorkingSetNodeDescriptor(
7070
// TODO: sync filter nodes info with real nodes info if the path is similar (e.g. filter /u/ULADZ and a folder ULADZ)
7171
val ussFilterNodeDescriptor = NodeSyncService.getService()
7272
.getOrCreateFilterNodeDescriptor(
73-
UssFilterNodeDescriptor.formUssBasePath(host),
73+
UssFilterNodeDescriptor.formUssBasePathFromHost(host),
7474
ussPath.path
7575
) {
7676
UssFilterNodeDescriptor(

src/main/kotlin/org/zowe/explorer/v3/components/files/UssFileNodeDescriptor.kt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@
66
* SPDX-License-Identifier: EPL-2.0
77
*
88
* Copyright Contributors to the Zowe Project.
9-
*
10-
* Contributors:
11-
* Zowe Community
12-
* Uladzislau Kalesnikau
139
*/
1410

1511
package org.zowe.explorer.v3.components.files
@@ -21,8 +17,13 @@ import org.zowe.explorer.v3.tree.nodes.Traversable
2117

2218
// TODO: doc
2319
class UssFileNodeDescriptor(
24-
displayName: String,
25-
override val path: List<String>,
20+
override val elemName: String,
21+
override val placingPath: List<String>,
2622
override var connectionConfigUuid: String
27-
) : ExplorerTreeNodeDescriptor(displayName, "USS file", AllIcons.FileTypes.Text),
23+
) : ExplorerTreeNodeDescriptor(elemName, "USS file", AllIcons.FileTypes.Text),
2824
ConnectionConfigRelated, Traversable
25+
{
26+
override fun getExactPath(): List<String> {
27+
return placingPath + elemName
28+
}
29+
}

src/main/kotlin/org/zowe/explorer/v3/components/files/UssFilterNodeDescriptor.kt

Lines changed: 21 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,70 +11,58 @@
1111
package org.zowe.explorer.v3.components.files
1212

1313
import com.intellij.icons.AllIcons
14-
import com.intellij.ide.util.treeView.PresentableNodeDescriptor
15-
import com.intellij.ui.SimpleTextAttributes
1614
import org.zowe.explorer.v3.components.files.operations.LoadUssNodesOperation
1715
import org.zowe.explorer.v3.components.files.operations.LoadUssNodesOperationData
1816
import org.zowe.explorer.v3.components.files.operations.RefreshUssNodesOperation
1917
import org.zowe.explorer.v3.components.files.operations.RefreshUssNodesOperationData
2018
import org.zowe.explorer.v3.state.config.ConfigType
2119
import org.zowe.explorer.v3.state.config.cache.ConfigCacheService
2220
import org.zowe.explorer.v3.state.config.connection.HttpConnectionConfig
21+
import org.zowe.explorer.v3.tree.ExplorerTreeComponentService
2322
import org.zowe.explorer.v3.tree.nodes.Renameable
2423
import org.zowe.explorer.v3.tree.nodes.ExplorerTreeNode
25-
import org.zowe.explorer.v3.tree.nodes.FileFetcherNodeDescriptor
26-
import org.zowe.explorer.v3.tree.nodes.LazyExpandable
24+
import org.zowe.explorer.v3.tree.nodes.FetcherNodeDescriptor
2725
import org.zowe.explorer.v3.tree.nodes.NoItemsFoundNodeDescriptor
28-
import org.zowe.explorer.v3.tree.nodes.UpdateInfoHolder
2926
import org.zowe.explorer.v3.tree.nodes.Refreshable
30-
import org.zowe.explorer.v3.tree.nodes.getCurrentRefreshDateTime
3127

3228
// TODO: doc
3329
class UssFilterNodeDescriptor(
3430
displayName: String,
3531
override var connectionConfigUuid: String,
36-
) : FileFetcherNodeDescriptor(
32+
) : FetcherNodeDescriptor(
3733
displayName,
34+
basePath = formUssBasePathFromConnectionConfig(connectionConfigUuid),
35+
filterPath = formUssFilterPath(displayName),
3836
"USS filter",
3937
AllIcons.Nodes.Module,
4038
connectionConfigUuid=connectionConfigUuid
41-
), Renameable, LazyExpandable, Refreshable, UpdateInfoHolder {
39+
), Renameable, Refreshable {
4240
companion object {
43-
fun formUssBasePath(host: String): List<String> {
41+
fun formUssBasePathFromHost(host: String): List<String> {
4442
return listOf(host, "files", "uss")
4543
}
4644

45+
fun formUssBasePathFromConnectionConfig(connectionConfigUuid: String): List<String> {
46+
val connectionConfig = ConfigCacheService.getService()
47+
.getConfigFromCache(ConfigType.HTTP_CONNECTION_CONFIG_V1, connectionConfigUuid)
48+
?: throw Exception("Connection config is not found for node $this")
49+
val host = (connectionConfig as HttpConnectionConfig).host
50+
return formUssBasePathFromHost(host)
51+
}
52+
4753
fun formUssFilterPath(displayName: String): List<String> {
4854
return if (displayName == "/") listOf(displayName)
4955
else displayName.split("/").map { "$it/"}
5056
}
5157
}
5258

53-
override val path: List<String>
54-
get() {
55-
val connectionConfig = ConfigCacheService.getService()
56-
.getConfigFromCache(ConfigType.HTTP_CONNECTION_CONFIG_V1, connectionConfigUuid)
57-
?: throw Exception("Connection config is not found for node $this")
58-
val host = (connectionConfig as HttpConnectionConfig).host
59-
return formUssBasePath(host) + formUssFilterPath(displayName)
60-
}
59+
private val fetchPath = basePath + filterPath
6160

62-
override var wasExpanded = false
61+
override val fetchFilter = if (filterPath.size > 1) filterPath.joinToString("").dropLast(1) else filterPath[0]
6362

64-
override val textToPreserve = listOf(
65-
PresentableNodeDescriptor.ColoredFragment(
66-
displayName,
67-
SimpleTextAttributes.REGULAR_ATTRIBUTES
68-
)
69-
)
63+
override val invalidationElem = if (filterPath.size > 1) filterPath.last().dropLast(1) else ""
7064

71-
override fun expandNode(node: ExplorerTreeNode) {
72-
if (!wasExpanded) {
73-
setUpdateInfo(genuinePresentationData)
74-
wasExpanded = true
75-
invalidateAssociatedNodes()
76-
}
77-
}
65+
override val invalidationPath = basePath + if (filterPath.size > 1) filterPath.dropLast(1) else filterPath
7866

7967
override fun getNodeChildren(node: ExplorerTreeNode): List<ExplorerTreeNode> {
8068
return if (connectionConfigUuid.isEmpty()) {
@@ -88,7 +76,7 @@ class UssFilterNodeDescriptor(
8876
} else {
8977
if (wasExpanded) {
9078
val operation = LoadUssNodesOperation(
91-
LoadUssNodesOperationData(node, path, displayName)
79+
LoadUssNodesOperationData(node, fetchPath, fetchFilter)
9280
)
9381
operation.run().loadedNodes
9482
} else {
@@ -102,12 +90,10 @@ class UssFilterNodeDescriptor(
10290
}
10391

10492
override fun refreshNode(node: ExplorerTreeNode) {
105-
setUpdateInfo(genuinePresentationData)
10693
val operation = RefreshUssNodesOperation(
107-
RefreshUssNodesOperationData(node, path, displayName)
94+
RefreshUssNodesOperationData(node, fetchPath, fetchFilter)
10895
)
10996
operation.run()
110-
invalidateAssociatedNodes()
11197
}
11298

11399
override fun renameNode() {

src/main/kotlin/org/zowe/explorer/v3/components/files/UssFolderNodeDescriptor.kt

Lines changed: 23 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,48 +11,45 @@
1111
package org.zowe.explorer.v3.components.files
1212

1313
import com.intellij.icons.AllIcons
14-
import com.intellij.ide.util.treeView.PresentableNodeDescriptor
15-
import com.intellij.ui.SimpleTextAttributes
1614
import org.zowe.explorer.v3.components.files.operations.LoadUssNodesOperation
1715
import org.zowe.explorer.v3.components.files.operations.LoadUssNodesOperationData
1816
import org.zowe.explorer.v3.components.files.operations.RefreshUssNodesOperation
1917
import org.zowe.explorer.v3.components.files.operations.RefreshUssNodesOperationData
18+
import org.zowe.explorer.v3.tree.ExplorerTreeComponentService
2019
import org.zowe.explorer.v3.tree.nodes.Renameable
2120
import org.zowe.explorer.v3.tree.nodes.ExplorerTreeNode
22-
import org.zowe.explorer.v3.tree.nodes.FileFetcherNodeDescriptor
23-
import org.zowe.explorer.v3.tree.nodes.LazyExpandable
21+
import org.zowe.explorer.v3.tree.nodes.FetcherNodeDescriptor
2422
import org.zowe.explorer.v3.tree.nodes.NoItemsFoundNodeDescriptor
2523
import org.zowe.explorer.v3.tree.nodes.Refreshable
26-
import org.zowe.explorer.v3.tree.nodes.UpdateInfoHolder
24+
import org.zowe.explorer.v3.tree.nodes.Traversable
2725

2826
// TODO: doc
2927
class UssFolderNodeDescriptor(
3028
displayName: String,
31-
var pathFilter: String,
32-
override var path: List<String>,
29+
parentFetchFilter: String,
3330
override var connectionConfigUuid: String,
34-
) : FileFetcherNodeDescriptor(
31+
) : FetcherNodeDescriptor(
3532
displayName,
33+
basePath = UssFilterNodeDescriptor.formUssBasePathFromConnectionConfig(connectionConfigUuid),
34+
filterPath = UssFilterNodeDescriptor.formUssFilterPath(parentFetchFilter) + "$displayName/",
3635
"USS folder",
3736
AllIcons.Nodes.Folder,
3837
connectionConfigUuid=connectionConfigUuid
39-
), Renameable, LazyExpandable, Refreshable, UpdateInfoHolder {
40-
override var wasExpanded = false
41-
override val textToPreserve = listOf(
42-
PresentableNodeDescriptor.ColoredFragment(
43-
displayName,
44-
SimpleTextAttributes.REGULAR_ATTRIBUTES
45-
)
46-
)
38+
), Renameable, Refreshable, Traversable
39+
{
40+
private val fetchPath = basePath + filterPath
4741

48-
override fun expandNode(node: ExplorerTreeNode) {
49-
if (!wasExpanded) {
50-
setUpdateInfo(genuinePresentationData)
51-
}
52-
wasExpanded = true
53-
getNodeChildren(node)
54-
invalidateAssociatedNodes()
55-
}
42+
override val fetchFilter = filterPath.joinToString("").dropLast(1)
43+
44+
override val placingPath = basePath + filterPath.dropLast(1)
45+
46+
override val elemName = displayName
47+
48+
override val invalidationPath = placingPath
49+
50+
override val invalidationElem = displayName
51+
52+
override fun getExactPath() = placingPath + elemName
5653

5754
override fun getNodeChildren(node: ExplorerTreeNode): List<ExplorerTreeNode> {
5855
return if (connectionConfigUuid.isEmpty()) {
@@ -66,7 +63,7 @@ class UssFolderNodeDescriptor(
6663
} else {
6764
if (wasExpanded) {
6865
val operation = LoadUssNodesOperation(
69-
LoadUssNodesOperationData(node, path, pathFilter)
66+
LoadUssNodesOperationData(node, fetchPath, fetchFilter)
7067
)
7168
operation.run().loadedNodes
7269
} else {
@@ -80,12 +77,10 @@ class UssFolderNodeDescriptor(
8077
}
8178

8279
override fun refreshNode(node: ExplorerTreeNode) {
83-
setUpdateInfo(genuinePresentationData)
8480
val operation = RefreshUssNodesOperation(
85-
RefreshUssNodesOperationData(node, path, pathFilter)
81+
RefreshUssNodesOperationData(node, fetchPath, fetchFilter)
8682
)
8783
operation.run()
88-
invalidateAssociatedNodes()
8984
}
9085

9186
override fun renameNode() {

src/main/kotlin/org/zowe/explorer/v3/components/files/operations/LoadUssNodesOperation.kt

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import org.zowe.explorer.v3.state.config.cache.ConfigCacheService
2121
import org.zowe.explorer.v3.state.config.connection.HttpConnectionConfig
2222
import org.zowe.explorer.v3.tree.nodes.ErrorNodeDescriptor
2323
import org.zowe.explorer.v3.tree.nodes.ExplorerTreeNode
24+
import org.zowe.explorer.v3.tree.nodes.FetcherNodeDescriptor
2425
import org.zowe.explorer.v3.tree.nodes.NoItemsFoundNodeDescriptor
2526
import org.zowe.explorer.v3.tree.nodes.NodeSyncService
2627
import org.zowe.kotlinsdk.core.ZoweProfileManager
@@ -69,28 +70,36 @@ class LoadUssNodesOperation(
6970
listFilesResponse
7071
.items
7172
.filter { it.name != "." && it.name != ".." }
72-
.map {
73-
if (it.fileType == FileItem.FileType.DIRECTORY) {
74-
val ussPath = operationData.path + "${it.name}/"
75-
val ussFolderNodeDescriptor = UssFolderNodeDescriptor(
76-
it.name,
77-
"${operationData.filter}/${it.name}",
78-
ussPath,
79-
connectionConfigUuid = parentNodeData.connectionConfigUuid
80-
)
81-
val ussFolderNode = ExplorerTreeNode(ussFolderNodeDescriptor, parentNode.project, parentNode)
82-
ussFolderNode
73+
.map { ussEntity ->
74+
val ussNodeDescriptor = if (ussEntity.fileType == FileItem.FileType.DIRECTORY) {
75+
NodeSyncService.getService()
76+
.getOrCreateRealNodeDescriptor(operationData.path, ussEntity.name) {
77+
UssFolderNodeDescriptor(
78+
ussEntity.name,
79+
operationData.filter,
80+
connectionConfigUuid = parentNodeData.connectionConfigUuid
81+
)
82+
}
8383
} else {
84-
val ussPath = operationData.path + it.name
85-
val ussFileNodeDescriptor = UssFileNodeDescriptor(it.name, ussPath, connectionConfigUuid = parentNodeData.connectionConfigUuid)
86-
val ussFileNode = ExplorerTreeNode(ussFileNodeDescriptor, parentNode.project, parentNode)
87-
ussFileNode
84+
NodeSyncService.getService()
85+
.getOrCreateRealNodeDescriptor(operationData.path, ussEntity.name) {
86+
UssFileNodeDescriptor(
87+
ussEntity.name,
88+
operationData.path,
89+
connectionConfigUuid = parentNodeData.connectionConfigUuid
90+
)
91+
}
8892
}
93+
ExplorerTreeNode(ussNodeDescriptor, parentNode.project, parentNode)
8994
}
9095
.ifEmpty { listOf(ExplorerTreeNode(NoItemsFoundNodeDescriptor(), parentNode.project, parentNode)) }
9196
}
9297
}
9398

99+
override fun setNodesRefreshInfo(fetcherNodeDescriptor: FetcherNodeDescriptor) {
100+
fetcherNodeDescriptor.setUpdateInfo()
101+
}
102+
94103
override fun run(): LoadUssNodesOperationResult {
95104
val loadedNodes = NodeSyncService.getService().loadNodes(this)
96105
return LoadUssNodesOperationResult(loadedNodes)

src/main/kotlin/org/zowe/explorer/v3/components/files/operations/LoadUssNodesOperationData.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@
66
* SPDX-License-Identifier: EPL-2.0
77
*
88
* Copyright Contributors to the Zowe Project.
9-
*
10-
* Contributors:
11-
* Zowe Community
12-
* Uladzislau Kalesnikau
139
*/
1410

1511
package org.zowe.explorer.v3.components.files.operations

src/main/kotlin/org/zowe/explorer/v3/components/files/operations/RefreshUssNodesOperationData.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,6 @@
66
* SPDX-License-Identifier: EPL-2.0
77
*
88
* Copyright Contributors to the Zowe Project.
9-
*
10-
* Contributors:
11-
* Zowe Community
12-
* Uladzislau Kalesnikau
139
*/
1410

1511
package org.zowe.explorer.v3.components.files.operations

0 commit comments

Comments
 (0)