org.apache.openmeetings.web.common.tree.FolderPanel.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.openmeetings.web.common.tree.FolderPanel.java

Source

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License") +  you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package org.apache.openmeetings.web.common.tree;

import static org.apache.openmeetings.web.app.Application.getBean;

import org.apache.openmeetings.db.dao.file.FileExplorerItemDao;
import org.apache.openmeetings.db.dao.record.RecordingDao;
import org.apache.openmeetings.db.entity.file.FileExplorerItem;
import org.apache.openmeetings.db.entity.file.FileItem;
import org.apache.openmeetings.db.entity.file.FileItem.Type;
import org.apache.openmeetings.db.entity.record.Recording;
import org.apache.wicket.Component;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

import com.googlecode.wicket.jquery.core.JQueryBehavior;
import com.googlecode.wicket.jquery.core.Options;
import com.googlecode.wicket.jquery.ui.interaction.draggable.Draggable;
import com.googlecode.wicket.jquery.ui.interaction.droppable.Droppable;

public class FolderPanel extends Panel {
    private static final long serialVersionUID = 1L;
    protected final MarkupContainer drop;
    protected final MarkupContainer drag;

    public FolderPanel(String id, final IModel<? extends FileItem> model, final FileTreePanel treePanel) {
        super(id, model);
        FileItem r = model.getObject();
        drop = r.getType() == Type.Folder ? new Droppable<FileItem>("drop", Model.of(r)) {
            private static final long serialVersionUID = 1L;

            @Override
            public void onConfigure(JQueryBehavior behavior) {
                super.onConfigure(behavior);
                behavior.setOption("hoverClass", Options.asString("ui-state-hover"));
                behavior.setOption("accept", Options
                        .asString(getDefaultModelObject() instanceof Recording ? ".recorditem" : ".fileitem"));
            }

            @Override
            public void onDrop(AjaxRequestTarget target, Component component) {
                Object o = component.getDefaultModelObject();
                if (o instanceof FileItem) {
                    FileItem p = (FileItem) drop.getDefaultModelObject();
                    FileItem f = (FileItem) o;
                    Long pid = p.getId();
                    //FIXME parent should not be moved to child !!!!!!!
                    if (pid != null && pid.equals(f.getId())) {
                        return;
                    }
                    f.setParentId(pid);
                    f.setOwnerId(p.getOwnerId());
                    f.setRoomId(p.getRoomId());
                    if (f instanceof Recording) {
                        Recording r = (Recording) f;
                        r.setGroupId(((Recording) p).getGroupId());
                        getBean(RecordingDao.class).update(r);
                    } else {
                        getBean(FileExplorerItemDao.class).update((FileExplorerItem) f);
                    }
                    treePanel.updateNode(target, p);
                    treePanel.updateNode(target, f);
                }
                target.add(treePanel.trees);
            }
        } : new WebMarkupContainer("drop");
        if (r.getId() == null) {
            drag = new WebMarkupContainer("drag");
        } else {
            drag = new Draggable<FileItem>("drag", Model.of(r)) {
                private static final long serialVersionUID = 1L;

                @Override
                public void onConfigure(JQueryBehavior behavior) {
                    super.onConfigure(behavior);
                    behavior.setOption("revert", "treeRevert");
                    behavior.setOption("cursor", Options.asString("move"));
                    behavior.setOption("helper", "'clone'");
                }
            }.setContainment(treePanel.getContainment());
            drag.add(AttributeAppender.append("class", r instanceof Recording ? "recorditem" : "fileitem"));
        }
        drag.add(r.getId() == null ? new Label("name", r.getName())
                : new AjaxEditableLabel<String>("name", Model.of(model.getObject().getName())) {
                    private static final long serialVersionUID = 1L;

                    @Override
                    protected String getLabelAjaxEvent() {
                        return "dblClick";
                    }

                    @Override
                    protected void onSubmit(AjaxRequestTarget target) {
                        super.onSubmit(target);
                        FileItem fi = model.getObject();
                        fi.setName(getEditor().getModelObject());
                        if (fi instanceof Recording) {
                            getBean(RecordingDao.class).update((Recording) fi);
                        } else {
                            getBean(FileExplorerItemDao.class).update((FileExplorerItem) fi);
                        }
                    }

                    @Override
                    public void onEdit(AjaxRequestTarget target) {
                        super.onEdit(target);
                    }
                });
        add(drop.add(drag).setOutputMarkupId(true));
    }
}