UFAL/Fetching preview item data only when necessary#1007
UFAL/Fetching preview item data only when necessary#1007
Conversation
WalkthroughThe changes refactor the way the Changes
Poem
✨ Finishing Touches
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (1)
dspace-api/src/main/java/org/dspace/util/FileInfo.java (1)
18-23: Consider encapsulation improvements.The public fields violate encapsulation principles and could lead to uncontrolled access to internal state.
Consider making fields private and providing appropriate getter methods:
-public String name; -public String content; -public String size; -public boolean isDirectory; -public Hashtable<String, FileInfo> sub = null; +private String name; +private String content; +private String size; +private boolean isDirectory; +private Hashtable<String, FileInfo> sub = null; +public String getName() { return name; } +public String getContent() { return content; } +public String getSize() { return size; } +public boolean isDirectory() { return isDirectory; } +public Hashtable<String, FileInfo> getSub() { return sub; }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (2)
dspace-api/src/main/java/org/dspace/content/PreviewContentServiceImpl.java(1 hunks)dspace-api/src/main/java/org/dspace/util/FileInfo.java(2 hunks)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: dspace-dependencies / docker-build (linux/amd64, ubuntu-latest, true)
- GitHub Check: Run Unit Tests
- GitHub Check: Run Integration Tests
🔇 Additional comments (1)
dspace-api/src/main/java/org/dspace/util/FileInfo.java (1)
25-30: Constructor change looks good for lazy loading optimization.The removal of the
subparameter from the constructor aligns with the PR objective to fetch preview data only when necessary. This supports lazy loading of hierarchical file structure data.
| public void setSub(Hashtable<String, FileInfo> sub) { | ||
| this.sub = sub; | ||
| } |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Add validation to the setter method.
The setter method lacks validation and could potentially cause issues if called with invalid data.
public void setSub(Hashtable<String, FileInfo> sub) {
+ if (sub != null && !isDirectory) {
+ throw new IllegalStateException("Cannot set sub for non-directory FileInfo");
+ }
this.sub = sub;
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| public void setSub(Hashtable<String, FileInfo> sub) { | |
| this.sub = sub; | |
| } | |
| public void setSub(Hashtable<String, FileInfo> sub) { | |
| if (sub != null && !isDirectory) { | |
| throw new IllegalStateException("Cannot set sub for non-directory FileInfo"); | |
| } | |
| this.sub = sub; | |
| } |
🤖 Prompt for AI Agents
In dspace-api/src/main/java/org/dspace/util/FileInfo.java around lines 48 to 50,
the setSub setter method currently assigns the input parameter directly without
validation. Add validation to check if the provided Hashtable<String, FileInfo>
sub is not null before assigning it to this.sub. If the input is invalid (e.g.,
null), handle it appropriately by either throwing an IllegalArgumentException or
ignoring the assignment to prevent potential issues.
| public FileInfo createFileInfo(PreviewContent pc) { | ||
| Hashtable<String, FileInfo> sub = createSubMap(pc.sub, this::createFileInfo); | ||
| return new FileInfo(pc.name, pc.content, pc.size, pc.isDirectory, sub); | ||
| return new FileInfo(pc.name, pc.content, pc.size, pc.isDirectory); | ||
| } |
There was a problem hiding this comment.
Critical: Missing assignment of sub map to FileInfo object.
The sub map is created on line 203 but never assigned to the FileInfo object. This will break the hierarchical structure of file previews as the sub-directory/file relationships will be lost.
public FileInfo createFileInfo(PreviewContent pc) {
Hashtable<String, FileInfo> sub = createSubMap(pc.sub, this::createFileInfo);
- return new FileInfo(pc.name, pc.content, pc.size, pc.isDirectory);
+ FileInfo fileInfo = new FileInfo(pc.name, pc.content, pc.size, pc.isDirectory);
+ fileInfo.setSub(sub);
+ return fileInfo;
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| public FileInfo createFileInfo(PreviewContent pc) { | |
| Hashtable<String, FileInfo> sub = createSubMap(pc.sub, this::createFileInfo); | |
| return new FileInfo(pc.name, pc.content, pc.size, pc.isDirectory, sub); | |
| return new FileInfo(pc.name, pc.content, pc.size, pc.isDirectory); | |
| } | |
| public FileInfo createFileInfo(PreviewContent pc) { | |
| Hashtable<String, FileInfo> sub = createSubMap(pc.sub, this::createFileInfo); | |
| FileInfo fileInfo = new FileInfo(pc.name, pc.content, pc.size, pc.isDirectory); | |
| fileInfo.setSub(sub); | |
| return fileInfo; | |
| } |
🤖 Prompt for AI Agents
In dspace-api/src/main/java/org/dspace/content/PreviewContentServiceImpl.java
around lines 202 to 205, the sub map created by createSubMap is not assigned to
the FileInfo object, causing loss of hierarchical structure. Modify the code to
assign the sub map to the FileInfo instance, either by passing it to the
constructor if supported or by setting it via a setter method after creating the
FileInfo object.
Problem description
Items are prefetching their previews even without "preview" button clicked, it is unnecessary.
Reported issues
ufal#1212
Summary by CodeRabbit