Package org.pentaho.reporting.designer.extensions.pentaho.repository.dialogs

Source Code of org.pentaho.reporting.designer.extensions.pentaho.repository.dialogs.RepositoryLoginDialog$URLChangeHandler

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.reporting.designer.extensions.pentaho.repository.dialogs;

import java.awt.Component;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.HeadlessException;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SpinnerNumberModel;

import org.pentaho.reporting.designer.core.ReportDesignerBoot;
import org.pentaho.reporting.designer.core.ReportDesignerContext;
import org.pentaho.reporting.designer.core.auth.AuthenticationData;
import org.pentaho.reporting.designer.core.auth.AuthenticationStore;
import org.pentaho.reporting.designer.core.auth.GlobalAuthenticationStore;
import org.pentaho.reporting.designer.core.editor.ReportDocumentContext;
import org.pentaho.reporting.designer.core.settings.WorkspaceSettings;
import org.pentaho.reporting.designer.extensions.pentaho.repository.Messages;
import org.pentaho.reporting.designer.extensions.pentaho.repository.util.PublishSettings;
import org.pentaho.reporting.designer.extensions.pentaho.repository.util.PublishUtil;
import org.pentaho.reporting.libraries.base.util.StringUtils;
import org.pentaho.reporting.libraries.designtime.swing.CommonDialog;
import org.pentaho.reporting.libraries.designtime.swing.KeyedComboBoxModel;

public class RepositoryLoginDialog extends CommonDialog
{
  private class URLChangeHandler implements ActionListener
  {
    private URLChangeHandler()
    {
    }

    public void actionPerformed(final ActionEvent e)
    {
      final String serverURL = (String) urlCombo.getSelectedItem();
      final AuthenticationData config = getStoredLoginData(serverURL, context);
      if (config != null)
      {
        timeoutField.setValue(PublishUtil.getTimeout(config));
        userField.setText(config.getUsername());
        userPasswordField.setText(config.getPassword());
      }
    }
  }

  private JComboBox urlCombo;
  private JSpinner timeoutField;
  private JTextField userField;
  private JPasswordField userPasswordField;
  private JCheckBox rememberSettings;
  private ReportDesignerContext context;
  private DefaultComboBoxModel urlModel;
  private JComboBox versionCombo;
  private KeyedComboBoxModel<Integer, String> versionModel;
  private boolean loginForPublish;

  public RepositoryLoginDialog(final Dialog owner,
                               final boolean loginForPublish) throws HeadlessException
  {
    super(owner);
    init(loginForPublish);
  }

  public RepositoryLoginDialog(final Frame parent,
                                 final boolean loginForPublish)
  {
    super(parent);
    init(loginForPublish);
  }

  public RepositoryLoginDialog(final boolean loginForPublish)
  {
    init(loginForPublish);
  }

  public static AuthenticationData getDefaultData(final ReportDesignerContext designerContext)
  {
    final GlobalAuthenticationStore authStore = designerContext.getGlobalAuthenticationStore();
    final String rurl = authStore.getMostRecentEntry();
    if (rurl != null)
    {
      final AuthenticationData loginData = getStoredLoginData(rurl, designerContext);
      if (loginData != null)
      {
        return loginData;
      }
    }

    final String user = ReportDesignerBoot.getInstance().getGlobalConfig().getConfigProperty
        ("org.pentaho.reporting.designer.extensions.pentaho.repository.ServerUser");
    final String pass = ReportDesignerBoot.getInstance().getGlobalConfig().getConfigProperty
        ("org.pentaho.reporting.designer.extensions.pentaho.repository.ServerPassword");
    final String url = ReportDesignerBoot.getInstance().getGlobalConfig().getConfigProperty
        ("org.pentaho.reporting.designer.extensions.pentaho.repository.PublishLocation");

    if (StringUtils.isEmpty(url))
    {
      return null;
    }
    return new AuthenticationData(url, user, pass, WorkspaceSettings.getInstance().getConnectionTimeout());
  }

  public static AuthenticationData getStoredLoginData(final String baseUrl,
                                                      final ReportDesignerContext context)
  {
    final ReportDocumentContext reportRenderContext = context.getActiveContext();
    final AuthenticationStore authStore;
    if (reportRenderContext == null)
    {
      authStore = context.getGlobalAuthenticationStore();
    }
    else
    {
      authStore = reportRenderContext.getAuthenticationStore();
    }

    final AuthenticationData data = authStore.getCredentials(baseUrl);
    if (data == null)
    {
      return null;
    }
    return data;
  }

  public AuthenticationData performLogin(final ReportDesignerContext context,
                                         AuthenticationData config)
  {
    if (context == null)
    {
      throw new NullPointerException();
    }

    this.context = context;
    if (config == null)
    {
      config = getDefaultData(context);
    }

    urlModel.removeAllElements();
    final String[] urls;
    final ReportDocumentContext reportRenderContext = context.getActiveContext();
    if (reportRenderContext == null)
    {
      urls = context.getGlobalAuthenticationStore().getKnownURLs();
    }
    else
    {
      urls = reportRenderContext.getAuthenticationStore().getKnownURLs();
    }
    for (int i = 0; i < urls.length; i++)
    {
      urlModel.addElement(urls[i]);
    }

    rememberSettings.setSelected(PublishSettings.getInstance().isRememberSettings());

    if (config != null)
    {
      timeoutField.setValue(PublishUtil.getTimeout(config));
      urlCombo.setSelectedItem(config.getUrl());
      userField.setText(config.getUsername());
      userPasswordField.setText(config.getPassword());
    }
    else
    {
      timeoutField.setValue(WorkspaceSettings.getInstance().getConnectionTimeout());
      urlCombo.setSelectedItem(null);
      userField.setText(null);
      userPasswordField.setText(null);
    }

    if (!super.performEdit())
    {
      return null;
    }

    urlCombo.getModel().setSelectedItem(urlCombo.getEditor().getItem());

    final String url = getServerURL();
    if (url == null)
    {
      return null;
    }

    PublishSettings.getInstance().setRememberSettings(isRememberSettings());
    final AuthenticationData data = new AuthenticationData(url, getUsername(), getUserPassword(), getTimeout());
    data.setOption(PublishUtil.SERVER_VERSION, String.valueOf(getVersion()));
    return data;
  }

  protected void init(final boolean loginForPublish)
  {
    setTitle(Messages.getInstance().getString("RepositoryLoginDialog.Title"));

    this.loginForPublish = loginForPublish;

    urlModel = new DefaultComboBoxModel();
    urlCombo = new JComboBox(urlModel);

    userField = new JTextField(25);
    userPasswordField = new JPasswordField();

    final SpinnerNumberModel spinnerModel = new SpinnerNumberModel();
    spinnerModel.setMinimum(0);
    spinnerModel.setMaximum(99999);

    timeoutField = new JSpinner(spinnerModel);
    timeoutField.setEditor(new JSpinner.NumberEditor(timeoutField, "#####"));

    rememberSettings = new JCheckBox(Messages.getInstance().getString("RepositoryLoginDialog.RememberTheseSettings"), true);

    urlCombo.setEditable(true);
    urlCombo.addActionListener(new URLChangeHandler());

    userField.setAction(getConfirmAction());
    userPasswordField.setAction(getConfirmAction());

    versionModel = new KeyedComboBoxModel<Integer, String>();
    versionModel.add(PublishUtil.SERVER_VERSION_SUGAR, Messages.getInstance().getString("RepositoryLoginDialog.Version.5"));
    versionModel.add(PublishUtil.SERVER_VERSION_LEGACY, Messages.getInstance().getString("RepositoryLoginDialog.Version.4x"));
    versionModel.setSelectedKey(PublishUtil.SERVER_VERSION_SUGAR);
    versionCombo = new JComboBox(versionModel);

    super.init();
  }

  protected String getDialogId()
  {
    return "ReportDesigner.Pentaho.RepositoryLogin";
  }

  protected Component createContentPane()
  {
    final JPanel contentPane = new JPanel();
    contentPane.setLayout(new GridBagLayout());

    final GridBagConstraints c = new GridBagConstraints();
    c.insets = new Insets(10, 10, 5, 10);
    c.gridx = 0;
    c.gridy = 0;
    c.fill = GridBagConstraints.BOTH;
    c.anchor = GridBagConstraints.WEST;
    contentPane.add(buildServerPanel(), c);

    c.gridy = 1;
    c.insets = new Insets(0, 10, 5, 10);
    contentPane.add(buildUserPanel(), c);

    c.gridy = 2;
    contentPane.add(rememberSettings, c);
    return contentPane;
  }

  private JPanel buildServerPanel()
  {
    final JPanel serverPanel = new JPanel(new GridBagLayout());
    final GridBagConstraints c = new GridBagConstraints();
    c.insets = new Insets(0, 20, 5, 20);
    c.gridx = 0;
    c.gridy = 0;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.anchor = GridBagConstraints.WEST;
    serverPanel.add(new JLabel(Messages.getInstance().getString("RepositoryLoginDialog.URL")), c);

    c.gridy = 1;
    c.insets = new Insets(0, 20, 5, 20);
    c.anchor = GridBagConstraints.WEST;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 1.0;
    serverPanel.add(urlCombo, c);

    c.insets = new Insets(0, 20, 5, 20);
    c.gridy = 2;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.anchor = GridBagConstraints.WEST;
    serverPanel.add(new JLabel(Messages.getInstance().getString("RepositoryLoginDialog.Timeout")), c);

    c.gridy = 3;
    c.insets = new Insets(0, 20, 5, 20);
    c.anchor = GridBagConstraints.WEST;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.weightx = 1.0;
    serverPanel.add(timeoutField, c);

    if (WorkspaceSettings.getInstance().isShowExpertItems() && loginForPublish == false)
    {
      c.insets = new Insets(0, 20, 5, 20);
      c.gridy = 4;
      c.fill = GridBagConstraints.HORIZONTAL;
      c.anchor = GridBagConstraints.WEST;
      serverPanel.add(new JLabel(Messages.getInstance().getString("RepositoryLoginDialog.Version")), c);

      c.gridy = 5;
      c.insets = new Insets(0, 20, 5, 20);
      c.anchor = GridBagConstraints.WEST;
      c.fill = GridBagConstraints.HORIZONTAL;
      c.weightx = 1.0;
      serverPanel.add(versionCombo, c);
    }
    serverPanel.setBorder(BorderFactory.createTitledBorder(Messages.getInstance().getString("RepositoryLoginDialog.Server")));
    return serverPanel;
  }

  private JPanel buildUserPanel()
  {
    final JPanel userPanel = new JPanel(new GridBagLayout());
    userPanel.setBorder(BorderFactory.createTitledBorder(Messages.getInstance().getString("RepositoryLoginDialog.PentahoCredentials")));
    final JLabel userLabel = new JLabel(Messages.getInstance().getString("RepositoryLoginDialog.User"));
    final JLabel passwordLabel = new JLabel(Messages.getInstance().getString("RepositoryLoginDialog.Password"));

    final GridBagConstraints c = new GridBagConstraints();
    c.insets = new Insets(0, 20, 5, 20);
    c.gridx = 0;
    c.gridy = 0;
    c.fill = GridBagConstraints.HORIZONTAL;
    userPanel.add(userLabel, c);

    c.gridy = 1;
    c.insets = new Insets(0, 20, 0, 20);
    userPanel.add(userField, c);

    c.gridy = 2;
    c.insets = new Insets(0, 20, 0, 20);
    userPanel.add(passwordLabel, c);

    c.gridy = 3;
    c.insets = new Insets(0, 20, 10, 20);
    userPanel.add(userPasswordField, c);
    return userPanel;
  }

  public String getServerURL()
  {
    final Object o = urlCombo.getSelectedItem();
    if (o == null)
    {
      return null;
    }
    return o.toString();
  }

  public int getVersion ()
  {
    final Integer selectedKey = versionModel.getSelectedKey();
    if (selectedKey == null || loginForPublish)
    {
      return 5;
    }
    return selectedKey.intValue();
  }
 
  public String getUsername()
  {
    return userField.getText();
  }

  public String getUserPassword()
  {
    return new String(userPasswordField.getPassword());
  }

  public int getTimeout()
  {
    final Object timeout = timeoutField.getValue();
    if (timeout instanceof Number)
    {
      final Number number = (Number) timeout;
      return number.intValue();
    }
    return WorkspaceSettings.getInstance().getConnectionTimeout();
  }

  public boolean isRememberSettings()
  {
    return rememberSettings.isSelected();
  }

}
TOP

Related Classes of org.pentaho.reporting.designer.extensions.pentaho.repository.dialogs.RepositoryLoginDialog$URLChangeHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.