Package org.osmorc.settings

Source Code of org.osmorc.settings.LibraryBundlingEditorComponent

/*
* Copyright (c) 2007-2009, Osmorc Development Team
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*     * Redistributions of source code must retain the above copyright notice, this list
*       of conditions and the following disclaimer.
*     * Redistributions in binary form must reproduce the above copyright notice, this
*       list of conditions and the following disclaimer in the documentation and/or other
*       materials provided with the distribution.
*     * Neither the name of 'Osmorc Development Team' nor the names of its contributors may be
*       used to endorse or promote products derived from this software without specific
*       prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
* THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
* OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package org.osmorc.settings;

import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.util.Disposer;
import com.intellij.ui.*;
import com.intellij.ui.components.JBList;
import com.intellij.util.PlatformIcons;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.osgi.jps.model.LibraryBundlificationRule;

import javax.swing.*;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.util.List;

/**
* @author <a href="mailto:janthomae@janthomae.de">Jan Thom&auml;</a>
*/
public class LibraryBundlingEditorComponent {
  private JPanel myMainPanel;
  private JPanel myRulesPanel;
  private JBList myRulesList;
  private JTextField myLibraryRegex;
  private ManifestEditor myManifestEditor;
  private JCheckBox myNeverBundle;
  private JCheckBox myStopAfterThisRule;

  private final CollectionListModel<LibraryBundlificationRule> myRulesModel;
  private int myLastSelected = -1;

  public LibraryBundlingEditorComponent() {
    GuiUtils.replaceJSplitPaneWithIDEASplitter(myMainPanel);
    ((JBSplitter)myMainPanel.getComponent(0)).setProportion(0.4f);

    myRulesPanel.add(
      ToolbarDecorator.createDecorator(myRulesList)
        .setAddAction(new AnActionButtonRunnable() {
          @Override
          public void run(AnActionButton button) {
            updateCurrentRule();
            myRulesModel.add(new LibraryBundlificationRule());
            myRulesList.setSelectedIndex(myRulesModel.getSize() - 1);
            updateFields();
          }
        })
        .setRemoveAction(new AnActionButtonRunnable() {
          @Override
          public void run(AnActionButton button) {
            myLastSelected = -1;
            if (myRulesModel.getSize() == 1) {
              myRulesModel.setElementAt(new LibraryBundlificationRule(), 0);
              myRulesList.setSelectedIndex(0);
            }
            else {
              int index = myRulesList.getSelectedIndex();
              myRulesModel.remove(index);
              myRulesList.setSelectedIndex(index > 0 ? index - 1 : 0);
            }
            updateFields();
          }
        })
        .setMoveUpAction(new AnActionButtonRunnable() {
          @Override
          public void run(AnActionButton button) {
            updateCurrentRule();
            myLastSelected = -1;
            ListUtil.moveSelectedItemsUp(myRulesList);
            updateFields();
          }
        })
        .setMoveDownAction(new AnActionButtonRunnable() {
          @Override
          public void run(AnActionButton button) {
            updateCurrentRule();
            myLastSelected = -1;
            ListUtil.moveSelectedItemsDown(myRulesList);
            updateFields();
          }
        })
        .addExtraAction(new AnActionButton("Copy", PlatformIcons.COPY_ICON) {
          @Override
          public void actionPerformed(AnActionEvent e) {
            updateCurrentRule();
            int index = myRulesList.getSelectedIndex();
            if (index >= 0) {
              myRulesModel.add(myRulesModel.getElementAt(index).copy());
              myRulesList.setSelectedIndex(myRulesModel.getSize() - 1);
              updateFields();
            }
          }

          @Override
          public boolean isEnabled() {
            return myRulesList.getSelectedIndex() >= 0;
          }
        })
        .createPanel(), BorderLayout.CENTER
    );

    myRulesModel = new CollectionListModel<LibraryBundlificationRule>();
    //noinspection unchecked
    myRulesList.setModel(myRulesModel);
    myRulesList.addListSelectionListener(new ListSelectionListener() {
      @Override
      public void valueChanged(ListSelectionEvent e) {
        updateCurrentRule();
        updateFields();
      }
    });
  }

  private void createUIComponents() {
    myManifestEditor = new ManifestEditor(null, "");
  }

  private void updateFields() {
    int index = myRulesList.getSelectedIndex();
    if (index >= 0 && index != myLastSelected) {
      final LibraryBundlificationRule rule = myRulesModel.getElementAt(index);
      myLibraryRegex.setText(rule.getRuleRegex());
      UIUtil.invokeLaterIfNeeded(new Runnable() {
        @Override
        public void run() {
          myManifestEditor.setText(rule.getAdditionalProperties());
        }
      });
      myNeverBundle.setSelected(rule.isDoNotBundle());
      myStopAfterThisRule.setSelected(rule.isStopAfterThisRule());
      myLastSelected = index;
    }
    myLibraryRegex.setEnabled(index >= 0);
    myManifestEditor.setEnabled(index >= 0);
    myNeverBundle.setEnabled(index >= 0);
    myStopAfterThisRule.setEnabled(index >= 0);
  }

  private void updateCurrentRule() {
    if (myLastSelected >= 0 && myLastSelected < myRulesModel.getSize()) {
      LibraryBundlificationRule newRule = new LibraryBundlificationRule();
      newRule.setRuleRegex(myLibraryRegex.getText().trim());
      newRule.setAdditionalProperties(myManifestEditor.getText().trim());
      newRule.setDoNotBundle(myNeverBundle.isSelected());
      newRule.setStopAfterThisRule(myStopAfterThisRule.isSelected());
      if (!newRule.equals(myRulesModel.getElementAt(myLastSelected))) {
        myRulesModel.setElementAt(newRule, myLastSelected);
      }
    }
  }

  public JPanel getMainPanel() {
    return myMainPanel;
  }

  public void dispose() {
    Disposer.dispose(myManifestEditor);
    myManifestEditor = null;
  }

  public boolean isModified(ApplicationSettings settings) {
    updateCurrentRule();
    List<LibraryBundlificationRule> rules = settings.getLibraryBundlificationRules();
    if (myRulesModel.getSize() != rules.size()) {
      return true;
    }
    for (int i = 0; i < rules.size(); i++) {
      if (!rules.get(i).equals(myRulesModel.getElementAt(i))) {
        return true;
      }
    }
    return false;
  }

  public void resetTo(ApplicationSettings settings) {
    myLastSelected = -1;
    myRulesModel.replaceAll(settings.getLibraryBundlificationRules());
    myRulesList.setSelectedIndex(0);
    updateFields();
  }

  public void applyTo(ApplicationSettings settings) throws ConfigurationException {
    updateCurrentRule();

    for (int i = 0; i < myRulesModel.getSize(); i++) {
      try {
        myRulesModel.getElementAt(i).validate();
      }
      catch (IllegalArgumentException e) {
        myRulesList.setSelectedIndex(i);
        throw new ConfigurationException(e.getMessage());
      }
    }

    settings.setLibraryBundlificationRules(ContainerUtil.newArrayList(myRulesModel.getItems()));
  }
}
TOP

Related Classes of org.osmorc.settings.LibraryBundlingEditorComponent

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.