Package org.pentaho.reporting.designer.core.util

Source Code of org.pentaho.reporting.designer.core.util.SystemInformationDialog$CopyAction

/*!
* 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.core.util;

import java.awt.Component;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.HeadlessException;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.Map;
import java.util.TreeMap;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JEditorPane;
import javax.swing.JScrollPane;
import javax.swing.text.html.HTMLDocument;

import org.pentaho.reporting.designer.core.util.dnd.ClipboardManager;
import org.pentaho.reporting.libraries.base.util.SystemInformation;
import org.pentaho.reporting.libraries.designtime.swing.CommonDialog;
import org.pentaho.reporting.libraries.designtime.swing.LibSwingUtil;
import org.pentaho.reporting.libraries.xmlns.writer.CharacterEntityParser;
import org.pentaho.reporting.libraries.xmlns.writer.HtmlCharacterEntities;

@SuppressWarnings({"HardcodedFileSeparator"})
public class SystemInformationDialog extends CommonDialog
{
  private class CopyAction extends AbstractAction
  {
    private CopyAction()
    {
      putValue(Action.NAME, UtilMessages.getInstance().getString("SystemInformationDialog.CopyToClipboard")); // NON-NLS
    }

    public void actionPerformed(final ActionEvent e)
    {
      ClipboardManager.getManager().setRawContent(new StringSelection(getSystemInformationAsText()));
    }
  }

  private JEditorPane editorPane;

  public SystemInformationDialog()
      throws HeadlessException
  {
    init();
  }

  public SystemInformationDialog(final Frame owner)
      throws HeadlessException
  {
    super(owner);
    init();
  }

  public SystemInformationDialog(final Dialog owner)
      throws HeadlessException
  {
    super(owner);
    init();
  }

  protected void init()
  {
    setTitle(UtilMessages.getInstance().getString("SystemInformationDialog.Title"));

    editorPane = new JEditorPane();
    editorPane.setEditable(false);
    editorPane.setContentType("text/html");//NON-NLS
    editorPane.setText(getSystemInformationAsHTML());
    final HTMLDocument htmlDocument = (HTMLDocument) editorPane.getDocument();
    htmlDocument.getStyleSheet().addRule("body { font-family:sans-serif; }");//NON-NLS
    editorPane.setCaretPosition(0);

    super.init();
    getConfirmAction().putValue(Action.NAME, UtilMessages.getInstance().getString("SystemInformationDialog.Close"));
  }

  protected void performInitialResize()
  {
    pack();
    GUIUtils.ensureMinimumDialogSize(this, 400, 300);
    GUIUtils.ensureMaximumDialogSize(this, 800, 600);

    LibSwingUtil.centerDialogInParent(this);
  }

  protected String getDialogId()
  {
    return "ReportDesigner.Core.SystemInformation";
  }

  public void performShow()
  {
    super.performEdit();
  }

  protected Component createContentPane()
  {
    return new JScrollPane(editorPane);
  }

  protected Action[] getExtraActions()
  {
    return new Action[]{ new CopyAction() };
  }

  protected boolean hasCancelButton()
  {
    return false;
  }

  @SuppressWarnings({"HardcodedLineSeparator"})
  private String getSystemInformationAsHTML()
  {
    final CharacterEntityParser cep = HtmlCharacterEntities.getEntityParser();
    final StringBuilder sb = new StringBuilder(10000);
    sb.append("<html><body>\n");//NON-NLS

    sb.append("<h1>");//NON-NLS
    sb.append(cep.encodeEntities(UtilMessages.getInstance().getString("SystemInformationDialog.SystemProperties.Title")));
    sb.append("</h1>");//NON-NLS
    formatMap(cep, sb, new TreeMap(System.getProperties()));
    sb.append("<br>");//NON-NLS

    //environment
    sb.append("<h1>");//NON-NLS
    sb.append(cep.encodeEntities(UtilMessages.getInstance().getString("SystemInformationDialog.Environment.Title")));
    sb.append("</h1>");//NON-NLS
    formatMap(cep, sb, new TreeMap<String, String>(System.getenv()));
    sb.append("<br>");//NON-NLS

    //other
    sb.append("<h1>");//NON-NLS
    sb.append(cep.encodeEntities(UtilMessages.getInstance().getString("SystemInformationDialog.Other.Title")));
    sb.append("</h1>");//NON-NLS
    formatMap(cep, sb, SystemInformation.getOtherProperties());


    sb.append("</body></html>\n");//NON-NLS

    return sb.toString();
  }

  @SuppressWarnings({"HardcodedLineSeparator"})
  private String getSystemInformationAsText()
  {
    final CharacterEntityParser cep = HtmlCharacterEntities.getEntityParser();
    final StringBuilder sb = new StringBuilder(10000);

    final String sysPropTitle = UtilMessages.getInstance().getString("SystemInformationDialog.SystemProperties.Title");
    sb.append(sysPropTitle);
    sb.append("\n");//NON-NLS
    sb.append(printUnderline(sysPropTitle.length()));
    sb.append("\n");//NON-NLS
    sb.append("\n");//NON-NLS
    formatMapText(cep, sb, new TreeMap(System.getProperties()));
    sb.append("\n");//NON-NLS

    //environment
    sb.append("\n");//NON-NLS
    final String envTitle = UtilMessages.getInstance().getString("SystemInformationDialog.Environment.Title");
    sb.append(envTitle);
    sb.append("\n");//NON-NLS
    sb.append(printUnderline(envTitle.length()));
    sb.append("\n");//NON-NLS
    sb.append("\n");//NON-NLS
    formatMapText(cep, sb, new TreeMap<String, String>(System.getenv()));
    sb.append("\n");//NON-NLS

    //other
    sb.append("\n");//NON-NLS
    final String otherTitle = UtilMessages.getInstance().getString("SystemInformationDialog.Other.Title");
    sb.append(otherTitle);
    sb.append("\n");//NON-NLS
    sb.append(printUnderline(otherTitle.length()));
    sb.append("\n");//NON-NLS
    sb.append("\n");//NON-NLS
    formatMapText(cep, sb, SystemInformation.getOtherProperties());
    sb.append("\n");//NON-NLS
    return sb.toString();
  }

  private String printUnderline (final int length)
  {
    final StringBuilder b = new StringBuilder(length);
    for (int i = 0; i < length; i += 1)
    {
      b.append("=");
    }
    return b.toString();
  }

  private void formatMapText(final CharacterEntityParser cep,
                         final StringBuilder sb,
                         final Map environmentMap)
  {
    if (environmentMap.isEmpty())
    {
      return;
    }

    for (final Object entryRaw : environmentMap.entrySet())
    {
      final Map.Entry entry = (Map.Entry) entryRaw;
      final String key = String.valueOf(entry.getKey());
      String value = (String) entry.getValue();
      if (value != null)
      {
        value = cep.encodeEntities(value);
        value = value.replace("\n", "\\n");//NON-NLS
        value = value.replace("\f", "\\f");//NON-NLS
        value = value.replace("\r", "\\r");//NON-NLS
        if (value.length() > 80)
        {
          value = value.replace(File.pathSeparator, File.pathSeparator + "\n          ");//NON-NLS
        }
      }
      sb.append(key);
      sb.append("=");//NON-NLS
      sb.append(value);
      sb.append("\n");//NON-NLS
    }
  }

  private void formatMap(final CharacterEntityParser cep,
                         final StringBuilder sb,
                         final Map environmentMap)
  {
    if (environmentMap.isEmpty())
    {
      return;
    }

    sb.append("<table>\n");//NON-NLS
    for (final Object entryRaw : environmentMap.entrySet())
    {
      final Map.Entry entry = (Map.Entry) entryRaw;
      final String key = String.valueOf(entry.getKey());
      String value = (String) entry.getValue();
      if (value != null)
      {
        value = cep.encodeEntities(value);
        value = value.replace("\n", "\\n");//NON-NLS
        value = value.replace("\f", "\\f");//NON-NLS
        value = value.replace("\r", "\\r");//NON-NLS
        if (value.length() > 80)
        {
          value = value.replace(File.pathSeparator, File.pathSeparator + "<br>\n");//NON-NLS
        }
      }
      sb.append("<tr valign=\"top\"><td>");//NON-NLS
      sb.append(cep.encodeEntities(key));
      sb.append("</td><td>");//NON-NLS
      sb.append(value);
      sb.append("</td></tr>\n");//NON-NLS
    }
    sb.append("</table>");//NON-NLS
  }


}
TOP

Related Classes of org.pentaho.reporting.designer.core.util.SystemInformationDialog$CopyAction

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.