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

org.jets3t.apps.cockpit.gui.CreateBucketDialog Maven / Gradle / Ivy

Go to download

Toolkit for Amazon S3, Amazon CloudFront, and Google Storage Service.

There is a newer version: 0.9.4
Show newest version
/*
 * JetS3t : Java S3 Toolkit
 * Project hosted at http://bitbucket.org/jmurty/jets3t/
 *
 * Copyright 2007 James Murty
 *
 * Licensed 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.jets3t.apps.cockpit.gui;

import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;
import java.util.Map;

import javax.swing.AbstractAction;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.KeyStroke;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;

import org.jets3t.gui.HyperlinkActivatedListener;
import org.jets3t.gui.JHtmlLabel;
import org.jets3t.service.Constants;
import org.jets3t.service.Jets3tProperties;
import org.jets3t.service.model.S3Bucket;
import org.jets3t.service.utils.ServiceUtils;

/**
 * Dialog box to prompt for the name and location of an S3 bucket. This dialog
 * should be created and displayed with {@link #setVisible(boolean)}, and once
 * control returns the user's responses are available via {@link #getOkClicked()},
 * {@link #getBucketName()} and {@link #getBucketLocation()}.
 * 

* The caller is responsible for disposing of this dialog. * * @author James Murty * */ public class CreateBucketDialog extends JDialog implements ActionListener { private static final long serialVersionUID = -8085778146542157010L; private static String[] locationNames = new String[] {}; private static Map locationValueMap = new HashMap(); private boolean okClicked = false; private JTextField bucketNameTextField = null; private JLabel bucketNameIsValidDNSResultLabel = null; private JComboBox bucketLocationComboBox = null; private JButton okButton = null; private JButton cancelButton = null; private final Insets insetsDefault = new Insets(3, 5, 3, 5); static { locationNames = new String[] { "US Standard", "US West (N. California)", "EU West (Ireland)", "Asia Pacific (Singapore)" }; locationValueMap.put(locationNames[0], S3Bucket.LOCATION_US); locationValueMap.put(locationNames[1], S3Bucket.LOCATION_US_WEST); locationValueMap.put(locationNames[2], S3Bucket.LOCATION_EUROPE); locationValueMap.put(locationNames[3], S3Bucket.LOCATION_ASIA_PACIFIC); } public CreateBucketDialog(String suggestedBucketName, Frame ownerFrame, HyperlinkActivatedListener hyperlinkListener) { super(ownerFrame, "Create a new bucket", true); boolean disableDnsBuckets = Jets3tProperties.getInstance(Constants.JETS3T_PROPERTIES_FILENAME) .getBoolProperty("s3service.disable-dns-buckets", false); cancelButton = new JButton("Cancel"); cancelButton.setActionCommand("Cancel"); cancelButton.addActionListener(this); okButton = new JButton("Create Bucket"); okButton.setActionCommand("OK"); okButton.addActionListener(this); JHtmlLabel bucketNameLabel = new JHtmlLabel("Bucket name", hyperlinkListener); bucketNameLabel.setHorizontalAlignment(JLabel.CENTER); JHtmlLabel bucketLocationLabel = new JHtmlLabel("Bucket location", hyperlinkListener); bucketLocationLabel.setHorizontalAlignment(JLabel.CENTER); JHtmlLabel bucketNameIsValidDNSLabel = new JHtmlLabel("DNS compatible?", hyperlinkListener); bucketLocationLabel.setHorizontalAlignment(JLabel.CENTER); bucketNameIsValidDNSResultLabel = new JLabel("No"); bucketLocationComboBox = new JComboBox(locationNames); bucketLocationComboBox.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { okButton.setEnabled( bucketLocationComboBox.getSelectedIndex() == 0 || "Yes".equals(bucketNameIsValidDNSResultLabel.getText())); } }); bucketLocationComboBox.setToolTipText("The geographical location where the bucket's contents will be stored"); JHtmlLabel bucketNameIsValidDNSExplanationLabel = null; if (disableDnsBuckets) { bucketNameIsValidDNSExplanationLabel = new JHtmlLabel( "Because the 's3service.disable-dns-buckets' property is set, you
" + "may only create buckets in the U.S. location.
", hyperlinkListener); bucketLocationComboBox.setEnabled(false); } else { bucketNameIsValidDNSExplanationLabel = new JHtmlLabel( "If your bucket name is DNS-compatible, you can choose a storage location
" + "other than US Standard and may potentially use the bucket as a virtual host.
", hyperlinkListener); bucketLocationComboBox.setEnabled(true); } bucketNameIsValidDNSExplanationLabel.setHorizontalAlignment(JLabel.CENTER); bucketNameTextField = new JTextField(); bucketNameTextField.setToolTipText("A unique bucket name in S3"); bucketNameTextField.getDocument().addDocumentListener(new DocumentListener() { public void insertUpdate(DocumentEvent e) { checkBucketName(e.getDocument()); } public void removeUpdate(DocumentEvent e) { checkBucketName(e.getDocument()); } public void changedUpdate(DocumentEvent e) { checkBucketName(e.getDocument()); } private void checkBucketName(Document doc) { String bucketName = ""; try { bucketName = doc.getText(0, doc.getLength()); } catch (BadLocationException e) { } if (ServiceUtils.isBucketNameValidDNSName(bucketName)) { bucketNameIsValidDNSResultLabel.setText("Yes"); okButton.setEnabled(true); } else { bucketNameIsValidDNSResultLabel.setText("No"); // OK button should not be enabled for non-US locations okButton.setEnabled(bucketLocationComboBox.getSelectedIndex() == 0); } } }); bucketNameTextField.setText(suggestedBucketName); bucketNameTextField.setSelectionStart(0); bucketNameTextField.setSelectionEnd(suggestedBucketName.length()); // Set default ENTER and ESCAPE buttons. this.getRootPane().setDefaultButton(okButton); this.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW) .put(KeyStroke.getKeyStroke("ESCAPE"), "ESCAPE"); this.getRootPane().getActionMap().put("ESCAPE", new AbstractAction() { private static final long serialVersionUID = -6225706489569112809L; public void actionPerformed(ActionEvent actionEvent) { setVisible(false); okClicked = false; } }); JPanel buttonsPanel = new JPanel(new GridBagLayout()); buttonsPanel.add(cancelButton, new GridBagConstraints(0, 0, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.NONE, insetsDefault, 0, 0)); buttonsPanel.add(okButton, new GridBagConstraints(1, 0, 1, 1, 1, 0, GridBagConstraints.CENTER, GridBagConstraints.NONE, insetsDefault, 0, 0)); JPanel panel = new JPanel(new GridBagLayout()); int row = 0; panel.add(bucketNameLabel, new GridBagConstraints(0, row, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, insetsDefault, 0, 0)); panel.add(bucketNameTextField, new GridBagConstraints(1, row, 1, 1, 1, 0, GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, insetsDefault, 0, 0)); panel.add(bucketNameIsValidDNSExplanationLabel, new GridBagConstraints(0, ++row, 2, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, insetsDefault, 0, 0)); if (!disableDnsBuckets) { panel.add(bucketNameIsValidDNSLabel, new GridBagConstraints(0, ++row, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, insetsDefault, 0, 0)); panel.add(bucketNameIsValidDNSResultLabel, new GridBagConstraints(1, row, 2, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, insetsDefault, 0, 0)); } panel.add(bucketLocationLabel, new GridBagConstraints(0, ++row, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, insetsDefault, 0, 0)); panel.add(bucketLocationComboBox, new GridBagConstraints(1, row, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, insetsDefault, 0, 0)); panel.add(new JHtmlLabel("Choosing a location other than US Standard may incur additional S3 usage fees.", hyperlinkListener), new GridBagConstraints(0, ++row, 2, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, insetsDefault, 0, 0)); panel.add(buttonsPanel, new GridBagConstraints(0, ++row, 2, 1, 0, 0, GridBagConstraints.CENTER, GridBagConstraints.HORIZONTAL, insetsDefault, 0, 0)); this.getContentPane().setLayout(new GridBagLayout()); this.getContentPane().add(panel, new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, insetsDefault, 0, 0)); this.pack(); this.setResizable(false); this.setLocationRelativeTo(ownerFrame); } public void actionPerformed(ActionEvent event) { if (event.getSource().equals(okButton)) { this.setVisible(false); okClicked = true; } else if (event.getSource().equals(cancelButton)) { this.setVisible(false); okClicked = false; } } public boolean getOkClicked() { return okClicked; } public String getBucketLocation() { Object locationSelected = bucketLocationComboBox.getSelectedItem(); return (String) locationValueMap.get(locationSelected); } public String getBucketName() { return bucketNameTextField.getText(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy