//This product is provided under the terms of EPL (Eclipse Public License) //version 1.0. // //The full license text can be read from: http://www.eclipse.org/org/documents/epl-v10.php package org.dtangler.swingui.rulesselector.impl; import java.awt.Component; import java.awt.Dimension; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JList; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import org.dtangler.swingui.actionfactory.ActionFactory; import org.dtangler.swingui.actionfactory.KeyActionAdapter; import org.dtangler.swingui.resource.icons.IconKey; import org.dtangler.swingui.windowmanager.SwingBaseView; import com.jgoodies.forms.builder.DefaultFormBuilder; import com.jgoodies.forms.factories.ButtonBarFactory; import com.jgoodies.forms.layout.FormLayout; public class SwingRulesView extends SwingBaseView implements RulesView { private final JButton okBtn; private final JButton cancelBtn; private final JButton newGroupBtn; private final JButton editGroupBtn; private final JButton removeGroupBtn; private final SwingRuleView forbiddenDeps; private final SwingRuleView allowedDeps; private final JList groups = new JList(); public SwingRulesView(ActionFactory actionFactory) { super(actionFactory); okBtn = createButton("Ok", Actions.ok); cancelBtn = createButton("Cancel", Actions.cancel); newGroupBtn = createButton("Add...", Actions.newGroup, IconKey.plus12); editGroupBtn = createButton("View/Edit...", Actions.editGroup); removeGroupBtn = createButton("Remove", Actions.removeGroups, IconKey.minus12); groups.setName("groups"); groups.getSelectionModel().addListSelectionListener( createSelectionActionAdapter(Actions.updateActionStates)); forbiddenDeps = new SwingRuleView(actionFactory, "Forbidden dependencies", "Forbidden dependency rules", "Cannot depend on", Actions.addForbiddenRule, Actions.removeForbiddenRule, Actions.addForbiddenRuleItem, Actions.removeForbiddenRuleItems, Actions.forbiddenRuleSelectionChanged); allowedDeps = new SwingRuleView(actionFactory, "Allowed dependencies", "Allowed dependency rules", "Can depend on", Actions.addAllowedRule, Actions.removeAllowedRule, Actions.addAllowedRuleItem, Actions.removeAllowedRuleItems, Actions.allowedRuleSelectionChanged); groups.addKeyListener(new KeyActionAdapter(KeyEvent.VK_INSERT, actionFactory.getAction(Actions.newGroup))); groups.addKeyListener(new KeyActionAdapter(KeyEvent.VK_DELETE, actionFactory.getAction(Actions.removeGroups))); groups.addKeyListener(new KeyActionAdapter(KeyEvent.VK_ENTER, actionFactory.getAction(Actions.editGroup))); } public Dimension getPreferredSize() { return new Dimension(450, 450); } public String getTitle() { return "Dependency rules"; } protected JComponent buildViewComponent() { DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout( "fill:10dlu:grow", "fill:10dlu:grow,4dlu,p")); builder.setDefaultDialogBorder(); builder.append(createTabbedPane()); builder.nextRow(); builder.append(ButtonBarFactory.buildRightAlignedBar(okBtn, cancelBtn)); JPanel panel = builder.getPanel(); addCommonKeyEvent(panel, KeyEvent.VK_ESCAPE, Actions.cancel); return panel; } private Component createTabbedPane() { JTabbedPane tabbedPane = new JTabbedPane(); tabbedPane.addTab("Groups", createGroupPanel()); tabbedPane.addTab(forbiddenDeps.getTitle(), forbiddenDeps .getViewComponent()); tabbedPane.addTab(allowedDeps.getTitle(), allowedDeps .getViewComponent()); tabbedPane.setSelectedIndex(1); return tabbedPane; } private Component createGroupPanel() { DefaultFormBuilder builder = new DefaultFormBuilder(new FormLayout( "fill:p:grow,4dlu,p", "fill:p:grow")); builder.setDefaultDialogBorder(); builder.append(new JScrollPane(groups), createButtonStack(newGroupBtn, editGroupBtn, removeGroupBtn)); return builder.getPanel(); } public void setGroupNames(List<String> groupNames) { groups.setListData(groupNames.toArray()); } public RuleView forbiddenDeps() { return forbiddenDeps; } public RuleView allowedDeps() { return allowedDeps; } public List<String> getSelectedGroups() { return new ArrayList(Arrays.asList(groups.getSelectedValues())); } }