in openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java [153:329]
protected void onInitialize() {
super.onInitialize();
final OmTreeProvider tp = new OmTreeProvider(roomId);
select(tp.getRoot(), null, false, false);
form.add(tree = new FileItemTree("tree", this, tp));
add(form.add(downloader));
Droppable<BaseFileItem> trashToolbar = new Droppable<>("trash-toolbar") {
private static final long serialVersionUID = 1L;
@Override
public void onConfigure(JQueryBehavior behavior) {
super.onConfigure(behavior);
behavior.setOption("hoverClass", Options.asString("trash-toolbar-hover"));
behavior.setOption("accept", Options.asString(".recorditem, .fileitem"));
}
@Override
public JQueryBehavior newWidgetBehavior(String selector) {
return new DroppableBehavior(selector, this) {
private static final long serialVersionUID = 1L;
@Override
protected JQueryAjaxBehavior newOnDropAjaxBehavior(IJQueryAjaxAware source) {
return new OnDropAjaxBehavior(source) {
private static final long serialVersionUID = 1L;
@Override
public CharSequence getCallbackFunctionBody(CallbackParameter... parameters) {
return "OmFileTree.confirmTrash($(this), ui, function() {"
+ super.getCallbackFunctionBody(parameters)
+ "});";
}
};
}
};
}
@Override
public void onDrop(AjaxRequestTarget target, Component component) {
Object o = component.getDefaultModelObject();
if (o instanceof BaseFileItem f) {
if (isSelected(f)) {
deleteAll(target);
} else {
delete(f, target);
}
}
}
};
form.add(trashToolbar);
trashToolbar.add(getUpload());
trashToolbar.add(createDir);
trashToolbar.add(new WebMarkupContainer("refresh").add(new AjaxEventBehavior(EVT_CLICK) {
private static final long serialVersionUID = 1L;
@Override
protected void onEvent(AjaxRequestTarget target) {
update(target);
}
}));
trashToolbar.add(trash.setOutputMarkupId(true));
trash.add(new AjaxEventBehavior("confirmed.bs.confirmation") {
private static final long serialVersionUID = 1L;
@Override
protected void onEvent(AjaxRequestTarget target) {
deleteAll(target);
}
});
ConfirmationBehavior trashConfirm = new ConfirmationBehavior(newOkCancelDangerConfirmCfg(trashToolbar, getString("80")).withContent(getString("713"))) {
private static final long serialVersionUID = 1L;
@Override
public boolean isEnabled(Component component) {
return !readOnly && !selected.isEmpty();
}
};
trash.add(trashConfirm);
form.add(trees.add(tree).setOutputMarkupId(true));
updateSizes();
form.add(sizes.add(new Label("homeSize", homeSize), new Label("publicSize", publicSize)).setOutputMarkupId(true));
form.add(errorsDialog);
setReadOnly(false, null);
final SplitButton download = new SplitButton("download", Model.of("")) {
private static final long serialVersionUID = 1L;
private boolean isDownloadable(BaseFileItem f) {
return !f.isReadOnly() && (Type.PRESENTATION == f.getType() || Type.IMAGE == f.getType() || Type.RECORDING == f.getType());
}
private AbstractLink createLink(String markupId, IModel<String> model, String ext) {
return new BootstrapAjaxLink<>(markupId, model, Buttons.Type.Outline_Primary, model) {
private static final long serialVersionUID = 1L;
@Override
protected void onConfigure() {
super.onConfigure();
for (CssClassNameAppender b : getBehaviors(CssClassNameAppender.class)) {
remove(b);
}
File f = null;
if (getSelected().size() == 1) {
BaseFileItem fi = getLastSelected();
if (isDownloadable(fi)) {
f = fi.getFile(ext);
}
}
setEnabled(f != null && f.exists());
}
@Override
public void onClick(AjaxRequestTarget target) {
onDownlownClick(target, ext);
}
}.setIconType(FontAwesome6IconType.download_s);
}
@Override
protected List<AbstractLink> newSubMenuButtons(String buttonMarkupId) {
return List.of(
createLink(buttonMarkupId, new ResourceModel("files.download.original"), null)
, createLink(buttonMarkupId, new ResourceModel("files.download.pdf"), EXTENSION_PDF)
, createLink(buttonMarkupId, new ResourceModel("files.download.jpg"), EXTENSION_JPG)
, createLink(buttonMarkupId, Model.of(EXTENSION_MP4), EXTENSION_MP4)
);
}
@Override
protected void addButtonBehavior(ButtonBehavior buttonBehavior) {
buttonBehavior.setSize(Buttons.Size.Small).setType(Buttons.Type.Outline_Secondary);
super.addButtonBehavior(buttonBehavior);
}
@Override
protected AbstractLink newBaseButton(String markupId, IModel<String> labelModel, IModel<IconType> iconTypeModel) {
AbstractLink btn = createLink(markupId, Model.of(""), null);
btn.add(AttributeModifier.append(ATTR_TITLE, new ResourceModel("867")));
return btn;
}
@Override
protected void onConfigure() {
super.onConfigure();
boolean enabled = false;
if (getSelected().size() == 1) {
enabled = isDownloadable(getLastSelected());
}
setEnabled(enabled);
}
public void onDownlownClick(AjaxRequestTarget target, String ext) {
BaseFileItem fi = getLastSelected();
File f = ext == null && (Type.IMAGE == fi.getType() || Type.PRESENTATION == fi.getType())
? fi.getOriginal() : fi.getFile(ext);
if (f != null && f.exists()) {
dwnldFile = f;
String fileExt = OmFileHelper.getFileExt(f.getName());
dwnldName = fi.getName();
if (!dwnldName.endsWith(fileExt)) {
dwnldName += "." + fileExt;
}
downloader.initiate(target);
}
}
};
buttons.setOutputMarkupId(true);
form.add(buttons.add(download, new ListView<>("other-buttons", newOtherButtons(BUTTON_MARKUP_ID)) {
private static final long serialVersionUID = 1L;
@Override
protected void populateItem(ListItem<AbstractLink> item) {
item.add(item.getModelObject());
}
}));
}