/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.verification.ui.vrules.preferences; import java.util.*; import org.jboss.tools.common.model.ui.preferences.IPreferencePageExt; import org.jboss.tools.common.model.ui.wizards.query.list.TreeItemSelectionManager; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.*; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.*; import org.eclipse.swt.widgets.*; import org.eclipse.ui.*; import org.jboss.tools.common.verification.ui.vrules.wizard.*; import org.jboss.tools.common.verification.ui.vrules.wizard.config.*; import org.jboss.tools.common.model.options.PreferenceModelUtilities; import org.jboss.tools.common.verification.vrules.core.resources.MarkerClearer; import org.jboss.tools.common.verification.vrules.*; public class RulesConfigurationPage extends PreferencePage implements IPreferencePageExt, IWorkbenchPreferencePage { protected ConfigSignificanceView significance = new ConfigSignificanceView(); protected TreeViewer treeViewer; protected ConfigRulesProvider provider = new ConfigRulesProvider(); protected DescriptionManager tip = new DescriptionManager(); VManager manager; protected Control createContents(Composite parent) { _init(); Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.horizontalSpacing = 10; layout.marginHeight = 10; layout.verticalSpacing = 10; layout.marginWidth = 10; composite.setLayout(layout); //composite.setBackground(new Color(null,255,0,0)); GridData gd = new GridData(GridData.FILL_BOTH); composite.setLayoutData(gd); Control sc = significance.createControl(composite); sc.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); treeViewer = new TreeViewer(composite, SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); treeViewer.setContentProvider(provider); treeViewer.setLabelProvider(provider); treeViewer.setInput(this); Control tc = treeViewer.getControl(); tc.setLayoutData(new GridData(GridData.FILL_BOTH)); TreeItemSelectionManager m = new TreeItemSelectionManager(treeViewer, new Flipper()); significance.update(); tip.install(treeViewer.getTree()); treeViewer.expandToLevel(2); m.update(); return composite; } void _init() { // Object model = PreferenceModelUtilities.getPreferenceModel(); manager = VHelper.getManager(/*model*/); if(manager == null) return; significance.setManager(manager); VRuleSet[] sets = manager.getRuleSets(); RuleSetWrapper[] ruleSets = new RuleSetWrapper[(sets == null) ? 0 : sets.length]; for (int i = 0; i < sets.length; i++) { ruleSets[i] = new RuleSetWrapper(sets[i]); createChildren(ruleSets[i], sets[i]); } provider.setRuleSets(ruleSets); } private void createChildren(RuleSetWrapper ruleSetWrapper, VRuleSet set) { ArrayList<ConfigItemWrapper> list = new ArrayList<ConfigItemWrapper>(); VRuleSet[] ss = set.getRuleSets(); for (int j = 0; j < ss.length; j++) { RuleSetWrapper c = new RuleSetWrapper(ss[j]); createChildren(c, ss[j]); c.setParent(ruleSetWrapper); list.add(c); } VRule[] rs = set.getRules(); for (int j = 0; j < rs.length; j++) { list.add(new RuleWrapper(rs[j], significance, ruleSetWrapper)); } ruleSetWrapper.setChildren((ConfigItemWrapper[])list.toArray(new ConfigItemWrapper[0])); } public void init(IWorkbench workbench) { } class Flipper implements TreeItemSelectionManager.Listener { public void flip(TreeItem item) { ConfigItemWrapper w = (ConfigItemWrapper)item.getData(); if(!w.isEnabled()) return; w.flip(); treeViewer.refresh(w); } public boolean isSelected(Object data) { ConfigItemWrapper w = (ConfigItemWrapper)data; return w != null && w.isSelected(); } } public boolean performCancel() { _cancel(); return super.performCancel(); } private void _cancel() { RuleSetWrapper[] ruleSets = provider.getRuleSets(); for (int i = 0; i < ruleSets.length; i++) { ruleSets[i].cancel(); } } private void setChecked(TreeItem item){ Object data = item.getData(); boolean checked = true; if(data instanceof ConfigItemWrapper) { checked = ((ConfigItemWrapper)data).isSelected(); } item.setChecked(checked); for(int i=0;i<item.getItemCount();i++){ TreeItem child = item.getItem(i); setChecked(child); } } public void performDefaults() { RuleSetWrapper[] ruleSets = provider.getRuleSets(); for (int i = 0; i < ruleSets.length; i++) { ruleSets[i].setDefaults(); } if (treeViewer != null) { Tree tree = treeViewer.getTree(); for(int i=0;i<tree.getItemCount();i++){ setChecked(tree.getItem(i)); } treeViewer.refresh(); } significance.loadDefaults(); super.performDefaults(); } public boolean performOk() { significance.commit(); PreferenceModelUtilities.getPreferenceModel().save(); if(isDisabled()) { MarkerClearer.clearAll(); } return true; } private boolean isDisabled() { RuleSetWrapper[] ruleSets = provider.getRuleSets(); if(ruleSets.length == 0) return true; for (int i = 0; i < ruleSets.length; i++) if(ruleSets[i].isSelected()) return false; return true; } public String getTitle() { return Messages.RulesConfigurationPage_RulesConfigurationTitle; } }