Java tutorial
/* * SrcSearchFilterPreferencePage.java * Created on 2013/06/28 * * Copyright (C) 2011-2013 Nippon Telegraph and Telephone Corporation * * Licensed 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 tubame.wsearch.ui.preferences; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.forms.events.ExpansionAdapter; import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.widgets.ExpandableComposite; import org.eclipse.ui.forms.widgets.FormToolkit; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import tubame.wsearch.Activator; import tubame.wsearch.biz.model.Extension; import tubame.wsearch.biz.model.SearchFilter; import tubame.wsearch.biz.model.WSPackage; import tubame.wsearch.ui.dialog.EditSearchExtAndPackageDialog; import tubame.wsearch.ui.dialog.EditSearchPackageDialog; import tubame.wsearch.ui.layout.AutoResizeTableLayout; /** * It is portable target source for filter setting page class.<br/> */ public class SrcSearchFilterPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { /** * Table viewer */ private CheckboxTableViewer tableViewer; /** * Filter set */ private List<SearchFilter> searchFilters; /** * Composite extension */ private ExpandableComposite advancedComposite; /** * Toolkit */ private final FormToolkit toolkit; /** * Map of extension detail table */ private HashMap<String, TableViewer> searchExtentionDetailTableViewerMap; /** * Map of exclusion detail table */ private HashMap<String, CheckboxTableViewer> searchPackageDetailTableViewerMap; /** * Button map */ private HashMap<String, List<Button>> buttonMap; /** * Selected object */ private Object selectionObject; /** * Logger */ private static final Logger LOGGER = LoggerFactory.getLogger(SrcSearchFilterPreferencePage.class); /** * Constructor.<br/> * Nothing in particular.<br/> */ public SrcSearchFilterPreferencePage() { toolkit = new FormToolkit(Display.getCurrent()); searchExtentionDetailTableViewerMap = new HashMap<String, TableViewer>(); searchPackageDetailTableViewerMap = new HashMap<String, CheckboxTableViewer>(); buttonMap = new HashMap<String, List<Button>>(); } /** * Constructor.<br/> * Nothing in particular.<br/> * * @param title * Title */ public SrcSearchFilterPreferencePage(String title) { super(title); toolkit = new FormToolkit(Display.getCurrent()); searchExtentionDetailTableViewerMap = new HashMap<String, TableViewer>(); searchPackageDetailTableViewerMap = new HashMap<String, CheckboxTableViewer>(); buttonMap = new HashMap<String, List<Button>>(); } /** * Constructor.<br/> * Nothing in particular.<br/> * * @param title * Title * @param image * Image */ public SrcSearchFilterPreferencePage(String title, ImageDescriptor image) { super(title, image); toolkit = new FormToolkit(Display.getCurrent()); searchExtentionDetailTableViewerMap = new HashMap<String, TableViewer>(); searchPackageDetailTableViewerMap = new HashMap<String, CheckboxTableViewer>(); buttonMap = new HashMap<String, List<Button>>(); } /** * {@inheritDoc} */ @Override public void init(IWorkbench workbench) { LOGGER.info(Activator.getResourceString("debug.msg.start") + "SrcSearchFilterPreferencePage#init"); } /** * {@inheritDoc} */ @Override protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(1, false); composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); composite.setLayout(layout); // Nexus Repositories Group group = new Group(composite, SWT.NONE); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false); group.setLayoutData(gd); layout = new GridLayout(2, false); group.setLayout(layout); group.setText(Activator.getResourceString(SrcSearchFilterPreferencePage.class.getName() + ".label.target")); tableViewer = CheckboxTableViewer.newCheckList(group, SWT.BORDER | SWT.V_SCROLL | SWT.SINGLE); Table table = tableViewer.getTable(); gd = new GridData(GridData.FILL_HORIZONTAL); gd.widthHint = 600; table.setLayoutData(gd); table.setHeaderVisible(true); table.setLinesVisible(true); String[] columnNames = new String[] { Activator.getResourceString(SrcSearchFilterPreferencePage.class.getName() + ".label.name") }; int[] columnWidths = new int[] { 200 }; for (int i = 0; i < columnNames.length; i++) { TableColumn tc = new TableColumn(table, SWT.LEFT); tc.setText(columnNames[i]); tc.setWidth(columnWidths[i]); } ColumnLayoutData[] layouts = { new ColumnWeightData(200, 200), new ColumnWeightData(200, 200) }; TableLayout tableLayout = new AutoResizeTableLayout(table); for (int i = 0; i < layouts.length; i++) { tableLayout.addColumnData(layouts[i]); } Set<SearchFilter> originals = Activator.getSrcSearchFilters(); searchFilters = new ArrayList<SearchFilter>(originals.size()); for (SearchFilter original : originals) { searchFilters.add(cloneSearchFilter(original)); } tableViewer.setLabelProvider(new SearchFilterLabelProvider()); tableViewer.setContentProvider(new SearchFilterContentProvider(searchFilters)); Collections.sort(searchFilters, new SearchFilterComparator()); tableViewer.setInput(searchFilters); for (SearchFilter elem : searchFilters) { tableViewer.setChecked(elem, elem.isEnabled()); } tableViewer.addCheckStateListener(new ICheckStateListener() { /** * {@inheritDoc} */ @Override public void checkStateChanged(CheckStateChangedEvent event) { SearchFilter repository = (SearchFilter) event.getElement(); repository.setEnabled(!repository.isEnabled()); } }); Composite advancedSection = createAdvancedSection(composite); Map<String, List<String>> subFilterMap = new HashMap<String, List<String>>(); Set<String> linkedOrderdSet = new LinkedHashSet<String>(); for (SearchFilter elem : searchFilters) { if (elem.isParent()) { linkedOrderdSet.add(elem.getName()); List<Extension> targets = elem.getTargets(); List<String> targetExt = new ArrayList<String>(); for (Extension extension : targets) { targetExt.add(extension.getChildRef()); } subFilterMap.put(elem.getName(), targetExt); } } createSearchSubFilterDetails(advancedSection, linkedOrderdSet, subFilterMap); return composite; } /** * Make the details of the sub-filter.<br/> * * @param parent * Parent element * @param linkedOrderdSet * Set of extension * @param subFilterMap * Map of the sub-filter */ private void createSearchSubFilterDetails(Composite parent, Set<String> linkedOrderdSet, Map<String, List<String>> subFilterMap) { for (String ext : linkedOrderdSet) { Group group = new Group(parent, SWT.NULL); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, false); gd.widthHint = 600; group.setLayoutData(gd); GridLayout layout = new GridLayout(3, false); group.setLayout(layout); group.setText(ext); List<String> keyNameList = subFilterMap.get(ext); Set<SearchFilter> srcSearchFilters = new HashSet<SearchFilter>(); for (String key : keyNameList) { srcSearchFilters.add(getSeachFilterByName(key)); } createSearchSubFilterDetails(group, srcSearchFilters); } } /** * Make the details of the sub-filter. <br/> * * @param group * Group * @param fliters * Filter set */ private void createSearchSubFilterDetails(Group group, Set<SearchFilter> fliters) { for (final SearchFilter sfilter : fliters) { final TableViewer extentionDetailTableViewer = new TableViewer(group, SWT.BORDER); Table table = extentionDetailTableViewer.getTable(); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); table.setLayoutData(gd); table.setHeaderVisible(true); table.setLinesVisible(true); String[] columnNames = new String[] { Activator .getResourceString(SrcSearchFilterPreferencePage.class.getName() + ".label.extension") }; int[] columnWidths = new int[] { 200 }; for (int i = 0; i < columnNames.length; i++) { TableColumn tc = new TableColumn(table, SWT.LEFT); tc.setText(columnNames[i]); tc.setWidth(columnWidths[i]); } ColumnLayoutData[] layouts = { new ColumnWeightData(200, 200), new ColumnWeightData(200, 200) }; TableLayout tableLayout = new AutoResizeTableLayout(table); for (int i = 0; i < layouts.length; i++) { tableLayout.addColumnData(layouts[i]); } extentionDetailTableViewer.setLabelProvider(new SearchExtentionDetailFilterLabelProvider()); extentionDetailTableViewer.setContentProvider(new SearchExtentionDetailFilterContentProvider(sfilter)); extentionDetailTableViewer.setInput(sfilter); extentionDetailTableViewer.addSelectionChangedListener(new ISelectionChangedListener() { /** * {@inheritDoc} */ @Override public void selectionChanged(SelectionChangedEvent arg0) { ISelection sel = extentionDetailTableViewer.getSelection(); if (sel instanceof IStructuredSelection) { IStructuredSelection selection = (IStructuredSelection) sel; selectionObject = selection.getFirstElement(); if (selectionObject instanceof Extension) { Extension extension = (Extension) selectionObject; if (sfilter.getName().equals("xml/xml") && extension.isUserDefined()) { switchEditAndRemoveButton(sfilter.getName(), true); } else { switchEditAndRemoveButton(sfilter.getName(), false); } } } } }); final CheckboxTableViewer packageDetailTableViewer = CheckboxTableViewer.newCheckList(group, SWT.BORDER | SWT.V_SCROLL | SWT.SINGLE); table = packageDetailTableViewer.getTable(); gd = new GridData(SWT.FILL, SWT.FILL, true, true); table.setLayoutData(gd); table.setHeaderVisible(true); table.setLinesVisible(true); columnNames = new String[] { Activator.getResourceString(SrcSearchFilterPreferencePage.class.getName() + ".label.package") }; columnWidths = new int[] { 200 }; for (int i = 0; i < columnNames.length; i++) { TableColumn tc = new TableColumn(table, SWT.LEFT); tc.setText(columnNames[i]); tc.setWidth(columnWidths[i]); } ColumnLayoutData[] layouts2 = { new ColumnWeightData(200, 200), new ColumnWeightData(200, 200) }; TableLayout tableLayout2 = new AutoResizeTableLayout(table); for (int i = 0; i < layouts2.length; i++) { tableLayout2.addColumnData(layouts2[i]); } List<WSPackage> packages = sfilter.getPackages(); packageDetailTableViewer.setLabelProvider(new SearchPackageDetailFilterLabelProvider()); packageDetailTableViewer.setContentProvider(new SearchPackageDetailFilterContentProvider(packages)); packageDetailTableViewer.setInput(packages); for (WSPackage elem : packages) { packageDetailTableViewer.setChecked(elem, elem.isEnabled()); } packageDetailTableViewer.addCheckStateListener(new ICheckStateListener() { /** * {@inheritDoc} */ @Override public void checkStateChanged(CheckStateChangedEvent event) { WSPackage wsPackage = (WSPackage) event.getElement(); wsPackage.setEnabled(!wsPackage.isEnabled()); } }); packageDetailTableViewer.addSelectionChangedListener(new ISelectionChangedListener() { /** * {@inheritDoc} */ @Override public void selectionChanged(SelectionChangedEvent event) { ISelection sel = packageDetailTableViewer.getSelection(); if (sel instanceof IStructuredSelection) { IStructuredSelection selection = (IStructuredSelection) sel; selectionObject = selection.getFirstElement(); if (selectionObject instanceof WSPackage) { WSPackage wsPackage = (WSPackage) selectionObject; if (wsPackage.isUserDefined()) { switchEditAndRemoveButton(wsPackage.getType(), true); } else { switchEditAndRemoveButton(wsPackage.getType(), false); } } } } }); this.searchExtentionDetailTableViewerMap.put(sfilter.getName(), extentionDetailTableViewer); this.searchPackageDetailTableViewerMap.put(sfilter.getName(), packageDetailTableViewer); createButtons(group, searchPackageDetailTableViewerMap.get(sfilter.getName()), sfilter); } } /** * {@inheritDoc} */ @Override protected void performApply() { LOGGER.info(Activator.getResourceString("debug.msg.start") + "SrcSearchFilterPreferencePage#performApply"); Activator.setSrcSearchFilters(new HashSet<SearchFilter>(searchFilters)); Activator.saveSrcSearchFilters(); Activator.getDefault().savePreferences(); List<SearchFilter> originals = searchFilters; searchFilters = new ArrayList<SearchFilter>(originals.size()); for (SearchFilter original : originals) { searchFilters.add(cloneSearchFilter(original)); } Collections.sort(searchFilters, new SearchFilterComparator()); tableViewer.setInput(searchFilters); for (SearchFilter filter : searchFilters) { tableViewer.setChecked(filter, filter.isEnabled()); if (searchPackageDetailTableViewerMap.containsKey(filter.getName())) { CheckboxTableViewer checkboxTableViewer = searchPackageDetailTableViewerMap.get(filter.getName()); checkboxTableViewer.setInput(filter.getPackages()); for (WSPackage wsPackage : filter.getPackages()) { checkboxTableViewer.setChecked(wsPackage, wsPackage.isEnabled()); } } if (searchExtentionDetailTableViewerMap.containsKey(filter.getName())) { TableViewer viewer = searchExtentionDetailTableViewerMap.get(filter.getName()); viewer.setInput(filter); } } } /** * {@inheritDoc} */ @Override public boolean performOk() { LOGGER.info(Activator.getResourceString("debug.msg.start") + "SrcSearchFilterPreferencePage#performOk"); performApply(); return super.performOk(); } /** * {@inheritDoc} */ @Override public boolean performCancel() { LOGGER.info(Activator.getResourceString("debug.msg.start") + "SrcSearchFilterPreferencePage#performCancel"); return super.performCancel(); } /** * {@inheritDoc} */ @Override protected void performDefaults() { LOGGER.info( Activator.getResourceString("debug.msg.start") + "SrcSearchFilterPreferencePage#performDefault"); Set<SearchFilter> originals = Activator.getDefaultSrcSearchFilters(); searchFilters = new ArrayList<SearchFilter>(originals.size()); for (SearchFilter original : originals) { searchFilters.add(cloneSearchFilter(original)); } Collections.sort(searchFilters, new SearchFilterComparator()); tableViewer.setInput(searchFilters); for (SearchFilter filter : searchFilters) { tableViewer.setChecked(filter, filter.isEnabled()); if (searchPackageDetailTableViewerMap.containsKey(filter.getName())) { CheckboxTableViewer checkboxTableViewer = searchPackageDetailTableViewerMap.get(filter.getName()); checkboxTableViewer.setInput(filter.getPackages()); for (WSPackage wsPackage : filter.getPackages()) { checkboxTableViewer.setChecked(wsPackage, true); } } if (searchExtentionDetailTableViewerMap.containsKey(filter.getName())) { TableViewer viewer = searchExtentionDetailTableViewerMap.get(filter.getName()); viewer.setInput(filter); } } super.performDefaults(); } /** * Create a button.<br/> * * @param parent * Parent group * @param viewer * Viewer * @param filter * Filter */ private void createButtons(Group parent, final CheckboxTableViewer viewer, final SearchFilter filter) { List<Button> buttons = new LinkedList<Button>(); Composite buttonComposite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(1, false); buttonComposite.setLayout(layout); buttonComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false)); final Button addButton = new Button(buttonComposite, SWT.PUSH); addButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); addButton .setText(Activator.getResourceString(SrcSearchFilterPreferencePage.class.getName() + ".label.add")); addButton.addSelectionListener(new SelectionListener() { /** * {@inheritDoc} */ @Override public void widgetDefaultSelected(SelectionEvent e) { } /** * {@inheritDoc} */ @Override public void widgetSelected(SelectionEvent e) { int ok = 0; // File extension to open a dialog that can be added only in the // sub-xml filter xml if (filter.getName().contains("xml/xml")) { EditSearchExtAndPackageDialog dialog = new EditSearchExtAndPackageDialog(getShell(), null, filter.getName()); ok = dialog.open(); if (ok == Window.OK && dialog.getTextValue() != null && !dialog.getTextValue().equals("")) { Object value = dialog.getValue(); SearchFilter searchFilter = getSeachFilterByName(filter.getName()); if (value instanceof Extension) { Extension exten = (Extension) value; exten.setUserDefined(true); searchFilter.getTargets().add(exten); TableViewer checkboxExtTableViewer = searchExtentionDetailTableViewerMap .get(filter.getName()); checkboxExtTableViewer.refresh(); } else if (value instanceof WSPackage) { WSPackage wsPackage = (WSPackage) value; wsPackage.setUserDefined(true); searchFilter.getPackages().add(wsPackage); CheckboxTableViewer checkboxPkgTableViewer = searchPackageDetailTableViewerMap .get(filter.getName()); checkboxPkgTableViewer.refresh(); checkboxPkgTableViewer.setChecked(wsPackage, wsPackage.isEnabled()); } } } else { EditSearchPackageDialog dialog = new EditSearchPackageDialog(getShell(), null, filter.getName()); ok = dialog.open(); if (ok == Window.OK && dialog.getWsPackage() != null && !dialog.getWsPackage().getName().equals("")) { WSPackage wsPackage = dialog.getWsPackage(); wsPackage.setUserDefined(true); SearchFilter searchFilter = getSeachFilterByName(filter.getName()); if (searchFilter != null) { searchFilter.getPackages().add(wsPackage); viewer.refresh(); viewer.setChecked(wsPackage, wsPackage.isEnabled()); } } } viewer.refresh(); } }); final Button editButton = new Button(buttonComposite, SWT.PUSH); editButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); editButton.setText( Activator.getResourceString(SrcSearchFilterPreferencePage.class.getName() + ".label.edit")); editButton.setEnabled(false); editButton.addSelectionListener(new SelectionListener() { /** * {@inheritDoc} */ @Override public void widgetSelected(SelectionEvent e) { if (selectionObject instanceof WSPackage) { WSPackage wsPackage = (WSPackage) selectionObject; WSPackage editWsPackage = new WSPackage(wsPackage.getType(), wsPackage.getName(), wsPackage.isEnabled()); EditSearchExtAndPackageDialog dialog = new EditSearchExtAndPackageDialog(getShell(), editWsPackage, filter.getName()); int ok = dialog.open(); if (ok == Window.OK && dialog.getTextValue() != null && !dialog.getTextValue().equals("")) { wsPackage.setName(dialog.getTextValue()); viewer.refresh(); viewer.setChecked(filter, filter.isEnabled()); } } else if (selectionObject instanceof Extension) { Extension selectExtension = (Extension) selectionObject; EditSearchExtAndPackageDialog dialog = new EditSearchExtAndPackageDialog(getShell(), selectExtension, filter.getName()); int ok = dialog.open(); if (ok == Window.OK && dialog.getTextValue() != null && !dialog.getTextValue().equals("")) { selectExtension.setName(dialog.getTextValue()); TableViewer checkboxTableViewer = searchExtentionDetailTableViewerMap.get(filter.getName()); checkboxTableViewer.refresh(); } } } /** * {@inheritDoc} */ @Override public void widgetDefaultSelected(SelectionEvent e) { } }); final Button removeButton = new Button(buttonComposite, SWT.PUSH); removeButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); removeButton.setText( Activator.getResourceString(SrcSearchFilterPreferencePage.class.getName() + ".label.remove")); removeButton.setEnabled(false); removeButton.addSelectionListener(new SelectionListener() { /** * {@inheritDoc} */ @Override public void widgetSelected(SelectionEvent e) { if (selectionObject instanceof WSPackage) { WSPackage wsPackage = (WSPackage) selectionObject; SearchFilter seachFilterByName = getSeachFilterByName(filter.getName()); seachFilterByName.getPackages().remove(wsPackage); viewer.refresh(); } else if (selectionObject instanceof Extension) { Extension selectExtension = (Extension) selectionObject; SearchFilter seachFilterByName = getSeachFilterByName(filter.getName()); seachFilterByName.getTargets().remove(selectExtension); TableViewer checkboxTableViewer = searchExtentionDetailTableViewerMap.get(filter.getName()); checkboxTableViewer.refresh(); } } public void widgetDefaultSelected(SelectionEvent e) { } }); buttons.add(addButton); buttons.add(editButton); buttons.add(removeButton); this.buttonMap.put(filter.getName(), buttons); } /** * Get the button map.<br/> * * @return Button map */ public HashMap<String, List<Button>> getButtonMap() { return buttonMap; } /** * Search filter for content provider class.<br/> */ private static class SearchFilterContentProvider implements IStructuredContentProvider { /** * Repository set */ private List<SearchFilter> repositories; /** * Constructor.<br/> * Nothing in particular.<br/> * * @param repositories * Repository set */ public SearchFilterContentProvider(List<SearchFilter> repositories) { this.repositories = repositories; } /** * {@inheritDoc} */ @Override public Object[] getElements(Object inputElement) { Set<Object> sets = new LinkedHashSet<Object>(); for (SearchFilter searchFilter : repositories) { if (searchFilter.isParent()) { sets.add(searchFilter); } } return sets.toArray(); } /** * {@inheritDoc} */ @Override public void dispose() { } /** * {@inheritDoc} */ @Override @SuppressWarnings("unchecked") public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { repositories = (List<SearchFilter>) newInput; } } /** * Search filter for label provider class.<br/> */ private static class SearchFilterLabelProvider extends LabelProvider implements ITableLabelProvider { /** * Constructor.<br/> * Nothing in particular.<br/> */ public SearchFilterLabelProvider() { super(); } /** * {@inheritDoc} */ @Override public Image getColumnImage(Object element, int columnIndex) { return null; } /** * {@inheritDoc} */ @Override public String getColumnText(Object element, int columnIndex) { if (element instanceof SearchFilter) { SearchFilter nr = (SearchFilter) element; if (columnIndex == 0) { return nr.getName(); } } return null; } } /** * It is the extension for more information content provider class.<br/> */ private static class SearchExtentionDetailFilterContentProvider implements IStructuredContentProvider { /** * Filter */ private SearchFilter filter; /** * Constructor.<br/> * Nothing in particular.<br/> * * @param filter * Filter */ public SearchExtentionDetailFilterContentProvider(SearchFilter filter) { this.filter = filter; } /** * {@inheritDoc} */ @Override public Object[] getElements(Object inputElement) { return filter.getTargets().toArray(); } /** * {@inheritDoc} */ @Override public void dispose() { } /** * {@inheritDoc} */ @Override public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { filter = (SearchFilter) newInput; } } /** * It is the extension details for label provider class. <br/> */ private static class SearchExtentionDetailFilterLabelProvider extends LabelProvider implements ITableLabelProvider, IColorProvider { /** * {@inheritDoc} */ @Override public Image getColumnImage(Object element, int columnIndex) { return null; } /** * {@inheritDoc} */ @Override public String getColumnText(Object element, int columnIndex) { if (element instanceof Extension) { Extension extension = (Extension) element; if (columnIndex == 0) { return extension.getName(); } } return null; } /** * {@inheritDoc} */ @Override public Color getBackground(Object arg0) { return null; } /** * {@inheritDoc} */ @Override public Color getForeground(Object element) { if (element instanceof Extension) { Extension extension = (Extension) element; if (!extension.isUserDefined()) { return Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY); } } return null; } } /** * It is excluded for more information content provider class.<br/> */ private static class SearchPackageDetailFilterContentProvider implements IStructuredContentProvider { /** * Exclusions */ private List<WSPackage> wsPackages; /** * Constructor.<br/> * Nothing in particular.<br/> * * @param wsPackages * Exclusions */ public SearchPackageDetailFilterContentProvider(List<WSPackage> wsPackages) { this.wsPackages = wsPackages; } /** * {@inheritDoc} */ @Override public Object[] getElements(Object inputElement) { return wsPackages.toArray(); } /** * {@inheritDoc} */ @Override public void dispose() { } /** * {@inheritDoc} */ @Override @SuppressWarnings("unchecked") public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { wsPackages = (List<WSPackage>) newInput; } } /** * It is excluded information for label provider class.<br/> */ private static class SearchPackageDetailFilterLabelProvider extends LabelProvider implements ITableLabelProvider, IColorProvider { /** * Constructor.<br/> * Nothing in particular.<br/> */ public SearchPackageDetailFilterLabelProvider() { super(); } /** * {@inheritDoc} */ @Override public Image getColumnImage(Object element, int columnIndex) { return null; } /** * {@inheritDoc} */ @Override public String getColumnText(Object element, int columnIndex) { if (element instanceof WSPackage) { WSPackage wsPackage = (WSPackage) element; if (columnIndex == 0) { return wsPackage.getName(); } } return null; } /** * {@inheritDoc} */ @Override public Color getBackground(Object arg0) { return null; } /** * {@inheritDoc} */ @Override public Color getForeground(Object element) { if (element instanceof WSPackage) { WSPackage wsPackage = (WSPackage) element; if (!wsPackage.isUserDefined()) { return Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY); } } return null; } } /** * Create a detail section.<br/> * * @param container * Container * @return Details section */ private Composite createAdvancedSection(Composite container) { advancedComposite = toolkit.createExpandableComposite(container, ExpandableComposite.COMPACT | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); advancedComposite.setFont(container.getFont()); advancedComposite.setBackground(container.getBackground()); advancedComposite.setText( Activator.getResourceString(SrcSearchFilterPreferencePage.class.getName() + ".label.advanced")); advancedComposite.setExpanded(true); advancedComposite.setLayout(new GridLayout(3, true)); advancedComposite.addExpansionListener(new ExpansionAdapter() { /** * {@inheritDoc} */ @Override public void expansionStateChanged(ExpansionEvent e) { Object obj = e.getSource(); handleExpand(getScrollingParent(obj)); } }); Composite advanced = new Composite(advancedComposite, SWT.None); advanced.setLayout(new GridLayout(1, false)); advancedComposite.setClient(advanced); return advanced; } /** * Get the parent element that scroll.<br/> * * @param obj * Element * @return Parent element */ private ScrolledComposite getScrollingParent(Object obj) { if (obj instanceof ExpandableComposite) { ExpandableComposite ecomp = (ExpandableComposite) obj; Composite parent = ecomp.getParent(); while (parent != null && !(parent instanceof ScrolledComposite)) { parent = parent.getParent(); } if (parent != null) { return (ScrolledComposite) parent; } } if (obj instanceof ScrolledComposite) { return (ScrolledComposite) obj; } return null; } /** * control the expansion of the element.<br/> * * @param composite * Element */ private void handleExpand(ScrolledComposite composite) { if (composite == null) { return; } try { composite.setRedraw(false); Composite c = (Composite) composite.getContent(); if (c == null) { return; } Point newSize = c.computeSize(SWT.DEFAULT, SWT.DEFAULT); composite.setMinSize(newSize); c.layout(true); } finally { composite.setRedraw(true); } } /** * Get a filter from the name.<br/> * * @param name * Name * @return Filter */ private SearchFilter getSeachFilterByName(String name) { for (SearchFilter searchFilter : searchFilters) { if (searchFilter.getName().equals(name)) { return searchFilter; } } return null; } /** * Switch enable delete button and edit button, the invalid.<br/> * * @param name * Button name * @param toggle * The determination whether to enabled or disabled */ private void switchEditAndRemoveButton(String name, boolean toggle) { List<Button> list = buttonMap.get(name); Button editButton = list.get(1); Button removeButton = list.get(2); editButton.setEnabled(toggle); removeButton.setEnabled(toggle); } /** * Search filter comparison class.<br/> */ private static class SearchFilterComparator implements Comparator<SearchFilter>, Serializable { /** * Serialization key */ private static final long serialVersionUID = 5200728610212996761L; /** * {@inheritDoc} */ @Override public int compare(SearchFilter arg0, SearchFilter arg1) { return arg0.getName().compareTo(arg1.getName()); } } /** * Make a copy of SearchFilter.<br/> * * @param original * SearchFilter the source * @return SearchFilter created */ private SearchFilter cloneSearchFilter(SearchFilter original) { List<Extension> targets = new ArrayList<Extension>(original.getTargets().size()); for (Extension orgExt : original.getTargets()) { Extension ext = new Extension(orgExt.getName(), orgExt.isEnabled(), orgExt.isUserDefined()); ext.setChildRef(orgExt.getChildRef()); targets.add(ext); } List<WSPackage> packages = new ArrayList<WSPackage>(original.getPackages().size()); for (WSPackage orgPackage : original.getPackages()) { WSPackage wsPackage = new WSPackage(orgPackage.getType(), orgPackage.getName(), orgPackage.isEnabled()); wsPackage.setUserDefined(orgPackage.isUserDefined()); packages.add(wsPackage); } SearchFilter filter = new SearchFilter(original.getName(), targets, packages, original.isEnabled()); filter.setParent(original.isParent()); return filter; } }