| /* |
| * 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.swing; |
| |
| import java.awt.BorderLayout; |
| import java.awt.Color; |
| import java.awt.Dimension; |
| import java.awt.Font; |
| 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.JComponent; |
| import javax.swing.JLabel; |
| import javax.swing.JPanel; |
| import javax.swing.JTextField; |
| import javax.swing.UIManager; |
| |
| import org.apache.chemistry.opencmis.client.api.CmisObject; |
| import org.apache.chemistry.opencmis.commons.enums.CmisVersion; |
| import org.apache.chemistry.opencmis.workbench.ClientHelper; |
| import org.apache.chemistry.opencmis.workbench.WorkbenchScale; |
| import org.apache.chemistry.opencmis.workbench.model.ClientModel; |
| import org.apache.chemistry.opencmis.workbench.worker.LoadObjectWorker; |
| |
| public abstract class ActionPanel extends JPanel implements ActionListener { |
| |
| private static final long serialVersionUID = 1L; |
| |
| private final ClientModel model; |
| private CmisObject object; |
| |
| private JPanel centerPanel; |
| |
| public ActionPanel(String title, String buttonLabel, ClientModel model) { |
| super(); |
| this.model = model; |
| createGUI(title, buttonLabel); |
| } |
| |
| public ClientModel getClientModel() { |
| return model; |
| } |
| |
| public void setObject(CmisObject object) { |
| this.object = object; |
| } |
| |
| public CmisObject getObject() { |
| return object; |
| } |
| |
| public CmisVersion getCmisVersion() { |
| try { |
| return model.getRepositoryInfo().getCmisVersion(); |
| } catch (Exception e) { |
| return CmisVersion.CMIS_1_0; |
| } |
| } |
| |
| private void createGUI(String title, String buttonLabel) { |
| BorderLayout borderLayout = new BorderLayout(); |
| borderLayout.setVgap(3); |
| setLayout(borderLayout); |
| |
| setBackground(Color.WHITE); |
| setBorder(WorkbenchScale.scaleBorder(BorderFactory.createCompoundBorder( |
| WorkbenchScale.scaleBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)), |
| WorkbenchScale.scaleBorder(BorderFactory.createCompoundBorder( |
| WorkbenchScale.scaleBorder(BorderFactory.createLineBorder(Color.GRAY, 2)), |
| WorkbenchScale.scaleBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5))))))); |
| |
| Font labelFont = UIManager.getFont("Label.font"); |
| Font boldFont = labelFont.deriveFont(Font.BOLD, labelFont.getSize2D() * 1.2f); |
| |
| JLabel titleLabel = new JLabel(title); |
| titleLabel.setFont(boldFont); |
| add(titleLabel, BorderLayout.PAGE_START); |
| |
| centerPanel = new JPanel(); |
| centerPanel.setLayout(new BoxLayout(centerPanel, BoxLayout.PAGE_AXIS)); |
| centerPanel.setBackground(Color.WHITE); |
| add(centerPanel, BorderLayout.CENTER); |
| |
| createActionComponents(); |
| |
| JButton actionButton = new JButton(buttonLabel); |
| actionButton.addActionListener(this); |
| add(actionButton, BorderLayout.PAGE_END); |
| |
| setMaximumSize(new Dimension(Short.MAX_VALUE, getPreferredSize().height)); |
| } |
| |
| protected void addActionComponent(JComponent comp) { |
| comp.setAlignmentX(LEFT_ALIGNMENT); |
| centerPanel.add(comp); |
| } |
| |
| @Override |
| public void actionPerformed(ActionEvent e) { |
| try { |
| ((JButton) e.getSource()).requestFocusInWindow(); |
| doAction(); |
| } catch (Exception ex) { |
| ClientHelper.showError(null, ex); |
| } |
| } |
| |
| protected void reload(final boolean reloadObject) { |
| final ClientModel model = getClientModel(); |
| |
| if (model.getCurrentFolder() != null) { |
| LoadObjectWorker worker = new LoadObjectWorker(ActionPanel.this, model, model.getCurrentFolder().getId()) { |
| @Override |
| protected void done() { |
| super.done(); |
| if (reloadObject) { |
| LoadObjectWorker.reloadObject(ActionPanel.this, model); |
| } |
| } |
| }; |
| worker.executeTask(); |
| } else { |
| if (reloadObject) { |
| LoadObjectWorker.reloadObject(ActionPanel.this, model); |
| } |
| } |
| } |
| |
| protected abstract void createActionComponents(); |
| |
| public abstract boolean isAllowed(); |
| |
| public abstract void doAction() throws Exception; |
| |
| protected JPanel createFilenamePanel(final JTextField filenameField) { |
| JPanel filePanel = new JPanel(new BorderLayout()); |
| filePanel.setBackground(Color.WHITE); |
| |
| filePanel.add(new JLabel("File:"), BorderLayout.LINE_START); |
| |
| filePanel.add(filenameField, BorderLayout.CENTER); |
| |
| JButton browseButton = new JButton("Browse"); |
| browseButton.addActionListener(new ActionListener() { |
| @Override |
| public void actionPerformed(ActionEvent event) { |
| WorkbenchFileChooser fileChooser = new WorkbenchFileChooser(); |
| int chooseResult = fileChooser.showDialog(filenameField, "Select"); |
| if (chooseResult == WorkbenchFileChooser.APPROVE_OPTION) { |
| if (fileChooser.getSelectedFile().isFile()) { |
| filenameField.setText(fileChooser.getSelectedFile().getAbsolutePath()); |
| } |
| } |
| } |
| }); |
| filePanel.add(browseButton, BorderLayout.LINE_END); |
| |
| return filePanel; |
| } |
| } |