private CPElement removePathFromResourceGroups(CPElement element, List<CPElementGroup> groups) {
   CPElement Inherited = element.getInherited();
   CPElementGroup resGroup = element.getParent();
   resGroup.removeChild(element);
   if (Inherited != null) { // applied exclusion to orig.
     IPath exclude = element.getPath().removeFirstSegments(Inherited.getPath().segmentCount());
     IPath[] exclusions = (IPath[]) Inherited.getAttribute(CPElement.EXCLUSION);
     IPath[] newExlusions = new IPath[exclusions.length + 1];
     System.arraycopy(exclusions, 0, newExlusions, 0, exclusions.length);
     newExlusions[exclusions.length] = exclude;
     Inherited.setAttribute(CPElement.EXCLUSION, newExlusions);
     return null;
   }
   // remove all inherited
   for (int i = 0; i < groups.size(); i++) {
     CPElementGroup group = groups.get(i);
     CPElement elements[] = group.getChildren(element.getEntryKind());
     for (CPElement element2 : elements) {
       if (element2.getInherited() == element) {
         group.removeChild(element2);
         break;
       }
     }
   }
   return element;
 }
 private void updatePathOnResourceGroups(CPElement element, List<CPElementGroup> groups) {
   CPElementGroup parent = element.getParent();
   IPath resPath = element.getPath();
   IPath[] exclusions = (IPath[]) element.getAttribute(CPElement.EXCLUSION);
   for (int i = 0; i < groups.size(); i++) {
     CPElementGroup group = groups.get(i);
     if (group != parent) {
       boolean found = false;
       CPElement[] elements = group.getChildren(element.getEntryKind());
       for (CPElement element2 : elements) {
         if (element2.getInherited() == element) {
           found = true;
           if (!CoreModelUtil.isExcludedPath(
               group.getResource().getFullPath().removeFirstSegments(resPath.segmentCount()),
               exclusions)) {
             group.replaceChild(
                 element2, new CPElement(element, group.getPath(), group.getResource()));
           } else {
             group.removeChild(element2);
           }
           break;
         }
       }
       if (!found) {
         addPathToResourceGroup(element, parent, group);
       }
     }
   }
 }
 private boolean canMoveDown(List<?> selected) {
   if (!canMove(selected)) {
     return false;
   }
   CPElement last = (CPElement) selected.get(selected.size() - 1);
   CPElementGroup parent = last.getParent();
   CPElement children[] = parent.getChildren(last.getEntryKind());
   int indx = Arrays.asList(children).indexOf(last);
   if (indx >= children.length - 1 || children[indx + 1].getInherited() != null) {
     return false;
   }
   return true;
 }
 private boolean canMoveUp(List<?> selected) {
   if (!canMove(selected)) {
     return false;
   }
   CPElement first = (CPElement) selected.get(0);
   CPElementGroup parent = first.getParent();
   CPElement children[] = parent.getChildren(first.getEntryKind());
   int indx = Arrays.asList(children).indexOf(first);
   if (indx <= 0) {
     return false;
   }
   return true;
 }
 private void removeEntry() {
   List<?> selected = getSelection();
   Object elem = selected.get(0);
   if (elem instanceof CPElement) {
     CPElement element = (CPElement) elem;
     CPElementGroup parent = element.getParent();
     if (removePathFromResourceGroups(element, fIncludeSymPathsList.getElements()) == null) {
       updatePathOnResourceGroups(element.getInherited(), fIncludeSymPathsList.getElements());
     }
     fIncludeSymPathsList.refresh();
     fIncludeSymPathsList.selectElements(new StructuredSelection(parent));
   } else if (elem instanceof CPElementAttribute) {
     CPElementAttribute attrib = (CPElementAttribute) elem;
     String key = attrib.getKey();
     Object value = key.equals(CPElement.EXCLUSION) ? new Path[0] : null;
     attrib.getParent().setAttribute(key, value);
     updatePathOnResourceGroups(attrib.getParent(), fIncludeSymPathsList.getElements());
     fIncludeSymPathsList.refresh();
   }
   updateStatus();
 }