Java tutorial
/* * 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.apache.directory.studio.ldapbrowser.common.actions; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import org.apache.directory.api.ldap.model.message.SearchScope; import org.apache.directory.api.ldap.model.schema.AttributeType; import org.apache.directory.studio.connection.core.Connection; import org.apache.directory.studio.connection.ui.actions.SelectionUtils; import org.apache.directory.studio.ldapbrowser.common.widgets.browser.BrowserCategory; import org.apache.directory.studio.ldapbrowser.common.widgets.browser.BrowserEntryPage; import org.apache.directory.studio.ldapbrowser.common.widgets.browser.BrowserSearchResultPage; import org.apache.directory.studio.ldapbrowser.core.BrowserCorePlugin; import org.apache.directory.studio.ldapbrowser.core.model.AttributeHierarchy; import org.apache.directory.studio.ldapbrowser.core.model.IAttribute; import org.apache.directory.studio.ldapbrowser.core.model.IBookmark; import org.apache.directory.studio.ldapbrowser.core.model.IBrowserConnection; import org.apache.directory.studio.ldapbrowser.core.model.IEntry; import org.apache.directory.studio.ldapbrowser.core.model.ISearch; import org.apache.directory.studio.ldapbrowser.core.model.ISearchResult; import org.apache.directory.studio.ldapbrowser.core.model.IValue; import org.apache.directory.studio.ldapbrowser.core.model.impl.Search; import org.apache.directory.studio.ldapbrowser.core.utils.LdapFilterUtils; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; /** * The SelectionUtils are used to extract specific beans from the current * selection (org.eclipse.jface.viewers.ISelection). * * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> */ public abstract class BrowserSelectionUtils extends SelectionUtils { /** * This method creates a prototype search from the given selection. * * Depended on the selected element it determines the best connection, * search base and filter: * <ul> * <li>ISearch: all parameters are copied to the prototype search (clone) * <li>IEntry or ISearchResult or IBookmark: Dn is used as search base * <li>IEntry: children filter is used as filter * <li>IAttribute or IValue: the entry's Dn is used as search base, * the filter is built using the name-value-pairs (query by example). * </ul> * * @param selection the current selection * @return a prototype search */ public static ISearch getExampleSearch(ISelection selection) { ISearch exampleSearch = new Search(); String oldName = exampleSearch.getSearchParameter().getName(); exampleSearch.getSearchParameter().setName(null); exampleSearch.setScope(SearchScope.SUBTREE); if ((selection instanceof StructuredSelection) && !selection.isEmpty()) { Object[] objects = ((IStructuredSelection) selection).toArray(); Comparator<Object> comparator = new Comparator<Object>() { public int compare(Object o1, Object o2) { if ((o1 instanceof IValue) && !(o2 instanceof IValue)) { return -1; } else if (!(o1 instanceof IValue) && (o2 instanceof IValue)) { return 1; } else if ((o1 instanceof IAttribute) && !(o2 instanceof IAttribute)) { return -1; } else if (!(o1 instanceof IAttribute) && (o2 instanceof IAttribute)) { return 1; } else if ((o1 instanceof AttributeHierarchy) && !(o2 instanceof AttributeHierarchy)) { return -1; } else if (!(o1 instanceof AttributeHierarchy) && (o2 instanceof AttributeHierarchy)) { return 1; } return 0; } }; Arrays.sort(objects, comparator); Object obj = objects[0]; if (obj instanceof ISearch) { ISearch search = (ISearch) obj; exampleSearch = (ISearch) search.clone(); exampleSearch.setName(null); } else if (obj instanceof IEntry) { IEntry entry = (IEntry) obj; exampleSearch.setBrowserConnection(entry.getBrowserConnection()); exampleSearch.setSearchBase(entry.getDn()); exampleSearch.setFilter(entry.getChildrenFilter()); } else if (obj instanceof ISearchResult) { ISearchResult searchResult = (ISearchResult) obj; exampleSearch.setBrowserConnection(searchResult.getEntry().getBrowserConnection()); exampleSearch.setSearchBase(searchResult.getEntry().getDn()); } else if (obj instanceof IBookmark) { IBookmark bookmark = (IBookmark) obj; exampleSearch.setBrowserConnection(bookmark.getBrowserConnection()); exampleSearch.setSearchBase(bookmark.getDn()); } else if (obj instanceof AttributeHierarchy || obj instanceof IAttribute || obj instanceof IValue) { IEntry entry = null; Set<String> filterSet = new LinkedHashSet<String>(); for (int i = 0; i < objects.length; i++) { Object object = objects[i]; if (object instanceof AttributeHierarchy) { AttributeHierarchy ah = (AttributeHierarchy) object; for (IAttribute attribute : ah) { entry = attribute.getEntry(); IValue[] values = attribute.getValues(); for (int v = 0; v < values.length; v++) { filterSet.add(LdapFilterUtils.getFilter(values[v])); } } } else if (object instanceof IAttribute) { IAttribute attribute = (IAttribute) object; entry = attribute.getEntry(); IValue[] values = attribute.getValues(); for (int v = 0; v < values.length; v++) { filterSet.add(LdapFilterUtils.getFilter(values[v])); } } else if (object instanceof IValue) { IValue value = (IValue) object; entry = value.getAttribute().getEntry(); filterSet.add(LdapFilterUtils.getFilter(value)); } } exampleSearch.setBrowserConnection(entry.getBrowserConnection()); exampleSearch.setSearchBase(entry.getDn()); StringBuffer filter = new StringBuffer(); if (filterSet.size() > 1) { filter.append("(&"); //$NON-NLS-1$ for (Iterator<String> filterIterator = filterSet.iterator(); filterIterator.hasNext();) { filter.append(filterIterator.next()); } filter.append(")"); //$NON-NLS-1$ } else if (filterSet.size() == 1) { filter.append(filterSet.toArray()[0]); } else { filter.append(ISearch.FILTER_TRUE); } exampleSearch.setFilter(filter.toString()); } else if (obj instanceof Connection) { IBrowserConnection connection = BrowserCorePlugin.getDefault().getConnectionManager() .getBrowserConnection((Connection) obj); exampleSearch.setBrowserConnection(connection); if (connection.getRootDSE().getChildrenCount() > 0) { exampleSearch.setSearchBase(connection.getRootDSE().getChildren()[0].getDn()); } else { exampleSearch.setSearchBase(connection.getRootDSE().getDn()); } } else if (obj instanceof IBrowserConnection) { IBrowserConnection connection = (IBrowserConnection) obj; exampleSearch.setBrowserConnection(connection); if (connection.getRootDSE().getChildrenCount() > 0) { exampleSearch.setSearchBase(connection.getRootDSE().getChildren()[0].getDn()); } else { exampleSearch.setSearchBase(connection.getRootDSE().getDn()); } } else if (obj instanceof BrowserCategory) { BrowserCategory cat = (BrowserCategory) obj; exampleSearch.setBrowserConnection(cat.getParent()); if (cat.getParent().getRootDSE().getChildrenCount() > 0) { exampleSearch.setSearchBase(cat.getParent().getRootDSE().getChildren()[0].getDn()); } else { exampleSearch.setSearchBase(cat.getParent().getRootDSE().getDn()); } } } exampleSearch.getSearchParameter().setName(oldName); return exampleSearch; } /** * Gets the BrowserCategory beans contained in the given selection. * * @param selection the selection * @return an array with BrowserCategory beans, may be empty. */ public static BrowserCategory[] getBrowserViewCategories(ISelection selection) { List<Object> list = getTypes(selection, BrowserCategory.class); return list.toArray(new BrowserCategory[list.size()]); } /** * Gets the IValue beans contained in the given selection. * * @param selection the selection * @return an array with IValue beans, may be empty. */ public static IValue[] getValues(ISelection selection) { List<Object> list = getTypes(selection, IValue.class); return list.toArray(new IValue[list.size()]); } /** * Gets the IAttribute beans contained in the given selection. * * @param selection the selection * @return an array with IAttribute beans, may be empty. */ public static IAttribute[] getAttributes(ISelection selection) { List<Object> list = getTypes(selection, IAttribute.class); return list.toArray(new IAttribute[list.size()]); } /** * Gets the AttributeHierarchy beans contained in the given selection. * * @param selection the selection * @return an array with AttributeHierarchy beans, may be empty. */ public static AttributeHierarchy[] getAttributeHierarchie(ISelection selection) { List<Object> list = getTypes(selection, AttributeHierarchy.class); return list.toArray(new AttributeHierarchy[list.size()]); } /** * Gets the Strings contained in the given selection. * * @param selection the selection * @return an array with Strings, may be empty. */ public static String[] getProperties(ISelection selection) { List<Object> list = getTypes(selection, String.class); return list.toArray(new String[list.size()]); } /** * Gets the AttributeTypeDescription beans contained in the given selection. * * @param selection the selection * @return an array with AttributeTypeDescription beans, may be empty. */ public static AttributeType[] getAttributeTypeDescription(ISelection selection) { List<Object> list = getTypes(selection, AttributeType.class); return list.toArray(new AttributeType[list.size()]); } /** * Gets the IEntry beans contained in the given selection. * * @param selection the selection * @return an array with IEntry beans, may be empty. */ public static IEntry[] getEntries(ISelection selection) { List<Object> list = getTypes(selection, IEntry.class); return list.toArray(new IEntry[list.size()]); } /** * Gets the IBookmark beans contained in the given selection. * * @param selection the selection * @return an array with IBookmark beans, may be empty. */ public static IBookmark[] getBookmarks(ISelection selection) { List<Object> list = getTypes(selection, IBookmark.class); return list.toArray(new IBookmark[list.size()]); } /** * Gets the ISearchResult beans contained in the given selection. * * @param selection the selection * @return an array with ISearchResult beans, may be empty. */ public static ISearchResult[] getSearchResults(ISelection selection) { List<Object> list = getTypes(selection, ISearchResult.class); return list.toArray(new ISearchResult[list.size()]); } /** * Gets all beans of the requested type contained in the given selection. * * @param selection the selection * @param type the requested type * @return a list containing beans of the requested type */ private static List<Object> getTypes(ISelection selection, Class<?> type) { List<Object> list = new ArrayList<Object>(); if (selection instanceof IStructuredSelection) { IStructuredSelection structuredSelection = (IStructuredSelection) selection; for (Object element : structuredSelection.toArray()) { if (type.isInstance(element)) { list.add(element); } } } return list; } /** * Gets the ISearch beans contained in the given selection. * * @param selection the selection * @return an array with ISearch beans, may be empty. */ public static ISearch[] getSearches(ISelection selection) { List<Object> list = getTypes(selection, ISearch.class); return list.toArray(new ISearch[list.size()]); } /** * Gets the BrowserEntryPage beans contained in the given selection. * * @param selection the selection * @return an array with BrowserEntryPage beans, may be empty. */ public static BrowserEntryPage[] getBrowserEntryPages(ISelection selection) { List<Object> list = getTypes(selection, BrowserEntryPage.class); return list.toArray(new BrowserEntryPage[list.size()]); } /** * Gets the BrowserSearchResultPage beans contained in the given selection. * * @param selection the selection * @return an array with BrowserSearchResultPage beans, may be empty. */ public static BrowserSearchResultPage[] getBrowserSearchResultPages(ISelection selection) { List<Object> list = getTypes(selection, BrowserSearchResultPage.class); return list.toArray(new BrowserSearchResultPage[list.size()]); } /** * Gets the objects contained in the given selection. * * @param selection the selection * @return an array with object, may be empty. */ public static Object[] getObjects(ISelection selection) { List<Object> list = getTypes(selection, Object.class); return list.toArray(new Object[list.size()]); } }