All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.chemistry.opencmis.workbench.FolderPanel Maven / Gradle / Ivy

The newest version!
/*
 * 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.chemistry.opencmis.workbench;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.commons.exceptions.CmisPermissionDeniedException;
import org.apache.chemistry.opencmis.workbench.model.ClientModel;
import org.apache.chemistry.opencmis.workbench.model.ClientModelEvent;
import org.apache.chemistry.opencmis.workbench.model.FolderListener;
import org.apache.chemistry.opencmis.workbench.model.ObjectListener;
import org.apache.chemistry.opencmis.workbench.worker.LoadFolderWorker;

public class FolderPanel extends JPanel implements FolderListener, ObjectListener {

    private static final long serialVersionUID = 1L;

    private static final int HISTORY = 10;

    private final ClientModel model;

    private String parentId;

    private JButton upButton;
    private JComboBox pathField;
    private JButton goButton;
    private FolderTable folderTable;

    public FolderPanel(ClientModel model) {
        super();

        this.model = model;
        model.addFolderListener(this);
        model.addObjectListener(this);
        createGUI();
    }

    @Override
    public void folderLoaded(final ClientModelEvent event) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                Folder currentFolder = event.getClientModel().getCurrentFolder();

                if (currentFolder != null) {
                    String path = currentFolder.getPath();
                    setPath(path);

                    Folder parent = null;
                    try {
                        parent = currentFolder.getFolderParent();
                    } catch (CmisPermissionDeniedException pde) {
                        // user is not allowed to the see the parent folder
                    }
                    if (parent == null) {
                        parentId = null;
                        upButton.setEnabled(false);
                    } else {
                        parentId = parent.getId();
                        upButton.setEnabled(true);
                    }
                } else {
                    setPath(null);
                    parentId = null;
                    upButton.setEnabled(false);
                }
            }
        });
    }

    @Override
    public void objectLoaded(final ClientModelEvent event) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                int selectedRow = folderTable.getSelectedRow();
                if (selectedRow > -1 && event.getClientModel().getCurrentObject() != null) {
                    if (selectedRow < folderTable.getRowCount()) {

                        String selId = folderTable.getValueAt(folderTable.getSelectedRow(), FolderTable.ID_COLUMN)
                                .toString();
                        String curId = event.getClientModel().getCurrentObject().getId();

                        if (!curId.equals(selId)) {
                            folderTable.clearSelection();
                        }
                    } else {
                        folderTable.clearSelection();
                    }
                }
            }
        });
    }

    private void createGUI() {
        setLayout(new BorderLayout());

        JPanel panel = new JPanel();
        panel.setLayout(new BoxLayout(panel, BoxLayout.LINE_AXIS));
        panel.setBorder(WorkbenchScale.scaleBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0)));

        upButton = new JButton("up");
        upButton.setEnabled(false);
        upButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                loadParentFolder();
            }
        });
        panel.add(upButton);

        pathField = new JComboBox();
        pathField.setEditable(true);
        pathField.setMaximumRowCount(HISTORY);

        pathField.getEditor().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                loadFolder();
            }
        });
        panel.add(pathField);

        goButton = new JButton("go");
        goButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                loadFolder();
            }
        });
        panel.add(goButton);

        add(panel, BorderLayout.PAGE_START);

        folderTable = new FolderTable(model);
        folderTable.setFillsViewportHeight(true);
        model.addFolderListener(folderTable);

        add(new JScrollPane(folderTable), BorderLayout.CENTER);
    }

    public void clear() {
        pathField.removeAllItems();
    }

    private void setPath(String path) {
        if (path == null) {
            // no path -> object couldn't be loaded
            pathField.setSelectedItem("");
            return;
        }

        // if the new path already exists in the history, remove it
        int i = 0;
        while (i < pathField.getItemCount()) {
            if (path.equals(pathField.getItemAt(i))) {
                pathField.removeItemAt(i);
            } else {
                i++;
            }
        }

        // add new path at the top
        pathField.insertItemAt(path, 0);

        // cut history
        while (pathField.getItemCount() > HISTORY) {
            pathField.removeItemAt(HISTORY);
        }

        // select the path in combo box
        pathField.setSelectedIndex(0);
    }

    private String getPath() {
        return pathField.getEditor().getItem().toString().trim();
    }

    private void loadFolder() {
        LoadFolderWorker.loadFolder(this, model, getPath());
    }

    private void loadParentFolder() {
        LoadFolderWorker.loadFolderById(this, model, parentId);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy