/** * Filters out the tab descriptors that do not have any sections for the * given input. */ protected ITabDescriptor[] filterTabDescriptors( ITabDescriptor[] descriptors, IWorkbenchPart part, ISelection selection) { List result = new ArrayList(); for (ITabDescriptor descriptor : descriptors) { ITabDescriptor filteredDescriptor = adaptDescriptorFor(descriptor, part, selection); if (!filteredDescriptor.getSectionDescriptors().isEmpty()) { result.add(filteredDescriptor); } } if (result.isEmpty()) { return EMPTY_DESCRIPTOR_ARRAY; } return (ITabDescriptor[]) result.toArray(new ITabDescriptor[result .size()]); }
/** * Given a property tab descriptor remove all its section descriptors that * do not apply to the given input object. */ protected ITabDescriptor adaptDescriptorFor(ITabDescriptor target, IWorkbenchPart part, ISelection selection) { List filteredSectionDescriptors = new ArrayList(); List descriptors = target.getSectionDescriptors(); for (Iterator iter = descriptors.iterator(); iter.hasNext();) { ISectionDescriptor descriptor = (ISectionDescriptor) iter.next(); if (descriptor.appliesTo(part, selection)) { filteredSectionDescriptors.add(descriptor); } } AbstractTabDescriptor result = (AbstractTabDescriptor) ((AbstractTabDescriptor) target) .clone(); result.setSectionDescriptors(filteredSectionDescriptors); return result; }