protected void onInitialize()

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());
			}
		}));
	}