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

org.netbeans.modules.autoupdate.ui.SettingsTab 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.netbeans.modules.autoupdate.ui;

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.prefs.Preferences;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.DefaultComboBoxModel;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import org.netbeans.api.autoupdate.UpdateUnitProvider;
import org.netbeans.api.options.OptionsDisplayer;
import static org.netbeans.modules.autoupdate.ui.Bundle.*;
import org.netbeans.modules.autoupdate.ui.actions.AutoupdateSettings;
import org.openide.DialogDescriptor;
import org.openide.DialogDisplayer;
import org.openide.NotifyDescriptor;
import org.openide.util.ImageUtilities;
import org.openide.util.NbBundle;
import org.openide.util.NbBundle.Messages;
import org.openide.util.NbPreferences;

/**
 * @author  Radek Matous, Jirka Rechtacek
 */
public class SettingsTab extends javax.swing.JPanel {
    private DetailsPanel details;
    private JScrollPane  scrollerForDetails;
    private JTable table;
    private JScrollPane  scrollerForTable;

    private Action removeAction;
    private Action editAction;    
    private Action addAction;   
    private Listener listener;
    private PluginManagerUI manager;
    private boolean refreshModel;
    
    /** Creates new form UnitTab */
    @Messages({"cbLocation_InstallDefault=Default",
        "cbLocation_InstallGlobal=Force install into shared directories",
        "cbLocation_InstallLocal=Force install into user directory"})
    @SuppressWarnings({"OverridableMethodCallInConstructor", "LeakingThisInConstructor"})
    public SettingsTab(PluginManagerUI manager) {
        this.manager = manager;
        initComponents();
        scrollerForTable = new JScrollPane();
        table = new Table();
        scrollerForTable.setViewportView(table);
        
        scrollerForDetails = new JScrollPane();
        details = new DetailsPanel();
        scrollerForDetails.setViewportView(details);
        
        spTab.setLeftComponent(scrollerForTable);
        spTab.setRightComponent(scrollerForDetails);
        
        table.setModel(new SettingsTableModel());
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        TableColumnModel columnModel = table.getColumnModel();
        columnModel.getColumn(1).setCellRenderer(new UpdateProviderRenderer ());
        
        
        cbCheckPeriod.setModel(new DefaultComboBoxModel(new String [] {
            getMessage("CTL_Update_every_startup"),
            getMessage("CTL_Update_every_day"),
            getMessage("CTL_Update_every_week"),
            getMessage("CTL_Update_every_2weeks"),
            getMessage("CTL_Update_every_month"),
            getMessage("CTL_Update_never")
        }));
        if (AutoupdateSettings.CUSTOM_CHECK_INTERVAL == getAutoUpdatePeriod ()) {
            cbCheckPeriod.addItem (getMessage("CTL_Update_custom"));
        }
        cbCheckPeriod.setSelectedIndex (getAutoUpdatePeriod ());
        cbLocation.setModel(new DefaultComboBoxModel(new String[] {
            cbLocation_InstallDefault(),
            cbLocation_InstallGlobal(),
            cbLocation_InstallLocal(),
        }));
        cbLocation.setSelectedIndex(Utilities.isGlobalInstallation() == null ? 0 : Utilities.isGlobalInstallation() ? 1 : 2);
        getSettingsTableModel ().setSettingsTab (this);
        TableColumn activeColumn = table.getColumnModel ().getColumn (0);
        activeColumn.setMaxWidth (table.getTableHeader ().getHeaderRect (0).width);
        
        editAction = new EditAction();
        removeAction = new RemoveAction();
        addAction = new AddAction();
        addButton.setAction(addAction);        
    }

    public String getDisplayName () {
        return NbBundle.getMessage (SettingsTab.class, "SettingsTab_displayName"); //NOI18N
    }
    
    PluginManagerUI getPluginManager () {
        return manager;
    }
        
    private synchronized void attachListener () {
        if (listener == null) {
            listener = new Listener ();
            table.getSelectionModel ().addListSelectionListener (listener);
            getSettingsTableModel ().addTableModelListener (listener);
        }
    }
    
    private synchronized void removeListener () {
        if (listener != null) {
            table.getSelectionModel ().removeListSelectionListener (listener);
            getSettingsTableModel ().removeTableModelListener (listener);
            listener = null;
        }
    }
    
    public int getSelectedRow() {
        if (table != null) {
            return table.getSelectedRow();
        }
        return -1;
    }
    
    public int setSelectedRow(int i) {
        if (table != null && table.getModel().getRowCount() > i) {
            table.getSelectionModel().setSelectionInterval(i, i);
        }
        return -1;
    }
    
    @Override
    public void addNotify () {
        super.addNotify ();
        attachListener ();                
        Utilities.startAsWorkerThread (new Runnable () {
            @Override
            public void run () {
                getSettingsTableModel ().refreshModel ();
                if (getSettingsTableModel().getRowCount() > 0) {
                    table.getSelectionModel().setSelectionInterval(0, 0);
                }
            }
        });        
        refreshModel = false;
    }
    
    @Override
    public void removeNotify () {
        super.removeNotify ();
        removeListener ();
        doLazyRefresh (null);
    }
    
    public void doLazyRefresh (final Runnable postTask) {
        if (needRefresh ()) {
            Utilities.startAsWorkerThread (new Runnable () {
                @Override
                public void run () {
                    setWaitingState (true);
                    try {
                        Utilities.presentRefreshProviders (manager, false);
                        manager.updateUnitsChanged ();
                        if (postTask != null) {
                            postTask.run ();
                        }
                    } finally {
                        setWaitingState (false);
                    }
                }
            });
            
        }
        refreshModel = false;
    }
    
    private static String getMessage(final String key) {
        return NbBundle.getMessage(SettingsTab.class, key); //NOI18N
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // //GEN-BEGIN:initComponents
    private void initComponents() {

        pluginsViewGroup = new javax.swing.ButtonGroup();
        lUpdateCenters = new javax.swing.JLabel();
        spTab = new javax.swing.JSplitPane();
        addButton = new javax.swing.JButton();
        lConnection = new javax.swing.JLabel();
        jSeparatorConnection = new javax.swing.JSeparator();
        lCheckPeriod = new javax.swing.JLabel();
        cbCheckPeriod = new javax.swing.JComboBox();
        bProxy = new javax.swing.JButton();
        lGeneral = new javax.swing.JLabel();
        jSeparatorAdvanced = new javax.swing.JSeparator();
        lLocation = new javax.swing.JLabel();
        cbLocation = new javax.swing.JComboBox();

        org.openide.awt.Mnemonics.setLocalizedText(lUpdateCenters, org.openide.util.NbBundle.getMessage(SettingsTab.class, "SettingsTab.lUpdateCenters.text")); // NOI18N

        spTab.setBorder(null);
        spTab.setDividerLocation(Integer.parseInt(NbBundle.getMessage (SettingsTab.class, "SettingsTab_Splitter_DefaultDividerLocation")));
        spTab.setResizeWeight(0.5);
        spTab.setOneTouchExpandable(true);

        org.openide.awt.Mnemonics.setLocalizedText(addButton, org.openide.util.NbBundle.getMessage(SettingsTab.class, "SettingsTab.addButton.text")); // NOI18N

        org.openide.awt.Mnemonics.setLocalizedText(lConnection, org.openide.util.NbBundle.getMessage(SettingsTab.class, "SettingsTab.lConnection.text")); // NOI18N

        lCheckPeriod.setLabelFor(cbCheckPeriod);
        org.openide.awt.Mnemonics.setLocalizedText(lCheckPeriod, org.openide.util.NbBundle.getMessage(SettingsTab.class, "SettingsTab.lCheckPeriod.text")); // NOI18N

        cbCheckPeriod.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cbCheckPeriodActionPerformed(evt);
            }
        });

        org.openide.awt.Mnemonics.setLocalizedText(bProxy, org.openide.util.NbBundle.getMessage(SettingsTab.class, "SettingsTab.bProxy.text")); // NOI18N
        bProxy.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bProxyActionPerformed(evt);
            }
        });

        org.openide.awt.Mnemonics.setLocalizedText(lGeneral, org.openide.util.NbBundle.getMessage(SettingsTab.class, "SettingsTab.lGeneral.text")); // NOI18N

        lLocation.setLabelFor(cbLocation);
        org.openide.awt.Mnemonics.setLocalizedText(lLocation, org.openide.util.NbBundle.getMessage(SettingsTab.class, "SettingsTab.lLocation.text")); // NOI18N

        cbLocation.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cbLocationActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(addButton)
                            .addComponent(spTab, javax.swing.GroupLayout.DEFAULT_SIZE, 871, Short.MAX_VALUE))
                        .addGap(1, 1, 1))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lGeneral)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jSeparatorAdvanced, javax.swing.GroupLayout.DEFAULT_SIZE, 792, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lConnection)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jSeparatorConnection, javax.swing.GroupLayout.DEFAULT_SIZE, 630, Short.MAX_VALUE))
                    .addComponent(lUpdateCenters)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(12, 12, 12)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(lLocation)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(cbLocation, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGap(0, 0, Short.MAX_VALUE))
                            .addGroup(layout.createSequentialGroup()
                                .addComponent(lCheckPeriod)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(cbCheckPeriod, 0, 548, Short.MAX_VALUE)
                                .addGap(58, 58, 58)
                                .addComponent(bProxy)))))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lUpdateCenters)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(spTab, javax.swing.GroupLayout.DEFAULT_SIZE, 32, Short.MAX_VALUE)
                .addGap(4, 4, 4)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(addButton)
                        .addGap(11, 11, 11)
                        .addComponent(jSeparatorConnection, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addComponent(lConnection))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(bProxy)
                    .addComponent(lCheckPeriod)
                    .addComponent(cbCheckPeriod, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(11, 11, 11)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(lGeneral, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jSeparatorAdvanced, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(7, 7, 7)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lLocation)
                    .addComponent(cbLocation, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );
    }// //GEN-END:initComponents

private void cbCheckPeriodActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbCheckPeriodActionPerformed
    setAutoUpdatePeriod (cbCheckPeriod.getSelectedIndex ());
}//GEN-LAST:event_cbCheckPeriodActionPerformed
    
private void bProxyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_bProxyActionPerformed
    OptionsDisplayer.getDefault ().open ("General"); //NOI18N
}//GEN-LAST:event_bProxyActionPerformed

    private void cbLocationActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cbLocationActionPerformed

        switch (cbLocation.getSelectedIndex()) {
            case 0: // default
                Utilities.setGlobalInstallation(null);
                break;
            case 1: // global
                // check write permissions
                Collection dirs = Utilities.sharedDirs();
                if (dirs.isEmpty()) {
                    NotifyDescriptor nd = new NotifyDescriptor(NbBundle.getMessage(SettingsTab.class, "SettingsTab.cbSharedInstall.NoSharedMessage"),
                            NbBundle.getMessage(SettingsTab.class, "SettingsTab.cbSharedInstall.NoSharedTitle"),
                            NotifyDescriptor.ERROR_MESSAGE,
                            NotifyDescriptor.ERROR_MESSAGE,
                            new Object[]{NotifyDescriptor.OK_OPTION}, // options
                            null); // default option
                    DialogDisplayer.getDefault().notifyLater(nd);
                    cbLocation.setSelectedIndex(0);
                } else {
                    for (File f : dirs) {
                        if (f.exists() && f.isDirectory() && !Utilities.canWriteInCluster(f)) {
                            NotifyDescriptor nd = new NotifyDescriptor(NbBundle.getMessage(SettingsTab.class, "SettingsTab.cbSharedInstall.ReadOnlyMessage", f),
                                    NbBundle.getMessage(SettingsTab.class, "SettingsTab.cbSharedInstall.ReadOnlyTitle"),
                                    NotifyDescriptor.ERROR_MESSAGE,
                                    NotifyDescriptor.ERROR_MESSAGE,
                                    new Object[]{NotifyDescriptor.OK_OPTION}, // options
                                    null); // default option
                            DialogDisplayer.getDefault().notifyLater(nd);
                            cbLocation.setSelectedIndex(0);
                            break;
                        }
                        Utilities.setGlobalInstallation(true);
                    }
                }
                break;
            case 2: // local
                Utilities.setGlobalInstallation(false);
                break;
            default:
                assert false : "Unknown index";
        }
    }//GEN-LAST:event_cbLocationActionPerformed

    public SettingsTableModel getSettingsTableModel() {
        return ((SettingsTableModel) table.getModel());
    }

    private class Listener implements ListSelectionListener, TableModelListener, Runnable {
        @Override
        public void valueChanged(ListSelectionEvent arg0) {
            modelOrSelectionChanged();
        }

        @Override
        public void tableChanged(TableModelEvent arg0) {
            modelOrSelectionChanged();
        }
        
        private StringBuffer detailsText;
        private boolean sbEnabled;
        private String detailsTitle;

        private synchronized void prepareContent() {
            assert ! SwingUtilities.isEventDispatchThread() : "Invoke SettingsTab.prepareContent out of AWT only";
            int rowIndex = table.getSelectedRow();
            if (rowIndex != -1 && table.getRowCount() > 0 && getSettingsTableModel().getUpdateUnitProvider(rowIndex) != null) {
                UpdateUnitProvider uup = getSettingsTableModel().getUpdateUnitProvider(rowIndex);
                detailsTitle = uup.getDisplayName();
                long lastTime = lastModification(uup);
                if (lastTime > 0) {
                    detailsText = new StringBuffer().append("").append(NbBundle.getMessage(UnitTab.class, "UnitTab_ReloadTime", //NOI18N
                            "")).append(new SimpleDateFormat().format(new Date(lastTime))).append("
"); } else { String never = getMessage("UnitTab_ReloadTime_Never");//NOI18N detailsText = new StringBuffer().append("").append(NbBundle.getMessage(UnitTab.class, "UnitTab_ReloadTime", "")).append(never).append("
"); //NOI18N } URL u = uup.getProviderURL(); String desc = uup.getDescription() == null ? "" : uup.getDescription(); if (u != null) { if (desc.length() > 0) { detailsText.append("").append(getMessage("SettingsTab_UpdateUnitProvider_Description")).append("
"); // NOI18N detailsText.append(desc).append("

"); // NOI18N } detailsText.append("").append(getMessage("SettingsTab_UpdateUnitProvider_URL")).append(" ").append(u.toExternalForm()).append("
"); // NOI18N sbEnabled = true; } else { sbEnabled = false; } } else { detailsTitle = null; detailsText = null; } SwingUtilities.invokeLater(this); } private void modelOrSelectionChanged() { if (! SwingUtilities.isEventDispatchThread()) { prepareContent(); } else { UnitDetails.UNIT_DETAILS_PROCESSOR.post(this); } } @Override public void run() { if (! SwingUtilities.isEventDispatchThread()) { prepareContent(); } else { details.setText(detailsText == null ? null : detailsText.toString()); editAction.setEnabled(sbEnabled); details.setTitle(detailsTitle); if (table.getSelectedRow() != -1) { details.setActionListener(removeAction); details.setActionListener2(editAction); } else { details.setActionListener2(null); details.setActionListener(null); } SettingsTab.this.revalidate(); } } } private long lastModification(UpdateUnitProvider unitProvider) { Preferences p = NbPreferences.root().node("/org/netbeans/modules/autoupdate");//NOI18N return p.getLong(unitProvider.getName()+"_"+UnitTab.PROP_LAST_CHECK, 0);//NOI18N } private boolean needRefresh () { return refreshModel; } public void setNeedRefresh () { refreshModel = true; getPluginManager ().undecorateTabTitles (); } private void setData (final UpdateUnitProvider provider, UpdateUnitProviderPanel panel) { provider.setDisplayName (panel.getProviderName ()); boolean forceRead = false; try { URL oldUrl = provider.getProviderURL (); URL newUrl = new URL (panel.getProviderURL ()); if (! oldUrl.toExternalForm ().equals (newUrl.toExternalForm ())) { provider.setProviderURL (newUrl); setNeedRefresh (); forceRead = true; } } catch(MalformedURLException mex) { Logger.getLogger (SettingsTab.class.getName ()).log (Level.INFO, mex.getLocalizedMessage (), mex); } provider.setEnable (panel.isActive ()); provider.setTrusted(panel.isTrusted()); if (panel.isActive ()) { // was not enabled and will be -> add it to model and read its content refreshProvider (provider, forceRead); } else { setNeedRefresh (); } } public void refreshProvider (final UpdateUnitProvider provider, final boolean force) { // was not enabled and will be -> add it to model and read its content setWaitingState (true); Utilities.startAsWorkerThread (new Runnable () { @Override public void run () { try { Utilities.presentRefreshProviders (Collections.singleton (provider), getPluginManager (), force); getPluginManager ().updateUnitsChanged (); } finally { setWaitingState (false); } } }); } private static DialogDescriptor getCustomizerDescriptor (UpdateUnitProviderPanel panel) { JButton bOK = panel.getOKButton (); Object[] options = new Object[2]; options[0] = bOK; options[1] = DialogDescriptor.CANCEL_OPTION; DialogDescriptor descriptor = new DialogDescriptor (panel,panel.getDisplayName (),true,options,DialogDescriptor.OK_OPTION,DialogDescriptor.DEFAULT_ALIGN, null, null); return descriptor; } private class EditAction extends AbstractAction { EditAction () { super(UnitTab.textForKey("SettingsTab.EditButton.text")); putValue(MNEMONIC_KEY, UnitTab.mnemonicForKey("SettingsTab.EditButton.text")); } @Override public void actionPerformed(ActionEvent arg0) { final int rowIndex = table.getSelectedRow(); if (rowIndex != -1) { final UpdateUnitProvider provider = getSettingsTableModel().getUpdateUnitProvider(rowIndex); if (provider == null) return; if (provider.getProviderURL() == null) { return ; } final UpdateUnitProviderPanel panel = new UpdateUnitProviderPanel(provider.isEnabled(), provider.getDisplayName(), // display name provider.getProviderURL().toExternalForm(), // URL true, // editing provider.isTrusted()); DialogDescriptor descriptor = getCustomizerDescriptor(panel); panel.getOKButton().addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { setData(provider, panel); table.getSelectionModel().setSelectionInterval(rowIndex, rowIndex); } }); DialogDisplayer.getDefault().createDialog(descriptor).setVisible(true); if (listener != null) { listener.modelOrSelectionChanged (); } } } } private class RemoveAction extends AbstractAction { RemoveAction() { super(UnitTab.textForKey("SettingsTab.RemoveButton.text"));//NOI18N putValue (MNEMONIC_KEY, UnitTab.mnemonicForKey ("SettingsTab.RemoveButton.text"));//NOI18N } @Override public void actionPerformed(ActionEvent arg0) { SettingsTableModel model = getSettingsTableModel(); int[] rowIndexes = table.getSelectedRows(); for (int rowIndex : rowIndexes) { if (rowIndex != -1) { UpdateUnitProvider provider = model.getUpdateUnitProvider(rowIndex); if (provider != null) {//NOI18N String msg = NbBundle.getMessage(SettingsTab.class, "SettingsTab.bRemove.message",provider.getDisplayName()); NotifyDescriptor nd = new NotifyDescriptor.Confirmation (msg); nd.setOptionType(NotifyDescriptor.YES_NO_OPTION); Object object = DialogDisplayer.getDefault ().notify (nd); if (NotifyDescriptor.YES_OPTION.equals (object)) { model.remove(rowIndex); } } } } model.refreshModel(); if (rowIndexes.length > 0) { if (model.getRowCount() > rowIndexes[0]) { table.getSelectionModel().setSelectionInterval(rowIndexes[0], rowIndexes[0]); } else { table.getSelectionModel().setSelectionInterval(0, 0); } } } } private class AddAction extends AbstractAction { AddAction() { super(UnitTab.textForKey("SettingsTab.AddButton.text")); putValue (MNEMONIC_KEY, UnitTab.mnemonicForKey ("SettingsTab.AddButton.text")); } @Override public void actionPerformed(ActionEvent arg0) { final UpdateUnitProviderPanel panel = new UpdateUnitProviderPanel(true, NbBundle.getMessage(SettingsTab.class, "SettingsTab_NewProviderName"), // NOI18N NbBundle.getMessage(SettingsTab.class, "SettingsTab_NewProviderURL"), // NOI18N false, false); DialogDescriptor descriptor = getCustomizerDescriptor(panel); panel.getOKButton().addActionListener(new ActionListener(){ @Override public void actionPerformed(ActionEvent arg0) { try { getSettingsTableModel().add (panel.getProviderName(), panel.getProviderName(), new URL(panel.getProviderURL()), panel.isActive()); getSettingsTableModel().refreshModel(); SettingsTableModel model = getSettingsTableModel(); for (int i = 0; i < model.getRowCount(); i++) { String providerName = model.getValueAt(i, 1).toString(); if (panel.getProviderName() != null && panel.getProviderName().equals(providerName)) { table.getSelectionModel().setSelectionInterval(i, i); } } } catch(MalformedURLException mex) { Logger.getLogger (SettingsTab.class.getName ()).log (Level.INFO, mex.getLocalizedMessage (), mex); } } }); DialogDisplayer.getDefault().createDialog(descriptor).setVisible(true); } } private class Table extends JTable { @SuppressWarnings("LeakingThisInConstructor") public Table() { setShowGrid(false); setIntercellSpacing(new Dimension(0, 0)); getAccessibleContext().setAccessibleName(NbBundle.getMessage(UnitTable.class, "ACN_UpdateCentersTable")); // NOI18N getAccessibleContext().setAccessibleDescription(NbBundle.getMessage(UnitTab.class, "ACD_UpdateCentersTable")); // NOI18N lUpdateCenters.setLabelFor(this); } @Override public void addNotify() { super.addNotify(); //#154148 if(UIManager.getLookAndFeel().getID().equals("Nimbus")) { getParent().setBackground(new Color(getBackground().getRGB(), false)); } else { getParent().setBackground(getBackground()); } } @Override public Component prepareRenderer(TableCellRenderer renderer, int rowIndex, int vColIndex) { Component c = super.prepareRenderer(renderer, rowIndex, vColIndex); Color bgColor = getBackground(); Color bgColorDarker = UnitTable.getDarkerColor(bgColor); if (isRowSelected(rowIndex)) { c.setForeground(getSelectionForeground()); } else { c.setForeground(getForeground()); } if (!isCellSelected(rowIndex, vColIndex)) { if (rowIndex % 2 == 0) { c.setBackground(bgColorDarker); } else { c.setBackground(bgColor); } } return c; } } private int getAutoUpdatePeriod () { return AutoupdateSettings.getPeriod (); } private void setAutoUpdatePeriod (int period) { if (period != getAutoUpdatePeriod ()) { AutoupdateSettings.setPeriod (period); cbCheckPeriod.removeItem (getMessage("CTL_Update_custom")); } } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton addButton; private javax.swing.JButton bProxy; private javax.swing.JComboBox cbCheckPeriod; private javax.swing.JComboBox cbLocation; private javax.swing.JSeparator jSeparatorAdvanced; private javax.swing.JSeparator jSeparatorConnection; private javax.swing.JLabel lCheckPeriod; private javax.swing.JLabel lConnection; private javax.swing.JLabel lGeneral; private javax.swing.JLabel lLocation; private javax.swing.JLabel lUpdateCenters; private javax.swing.ButtonGroup pluginsViewGroup; private javax.swing.JSplitPane spTab; // End of variables declaration//GEN-END:variables void setWaitingState (boolean waitingState) { getPluginManager ().setWaitingState (waitingState); table.setEnabled (! waitingState); } private static class UpdateProviderRenderer extends DefaultTableCellRenderer { @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { JLabel renderComponent = (JLabel) super.getTableCellRendererComponent (table, value, isSelected, hasFocus, row, column); if (value instanceof UpdateUnitProvider) { UpdateUnitProvider u = (UpdateUnitProvider) value; Image img = u.getSourceIcon(); final Icon icon = ImageUtilities.image2Icon(img); renderComponent.setIcon(icon); renderComponent.setText (u.getDisplayName()); renderComponent.setHorizontalAlignment(SwingConstants.LEFT); } Component retval = renderComponent; return retval; } } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy