public void group()

in src/main/java/org/jetbrains/plugins/spotbugs/gui/tree/model/Grouper.java [79:207]


	public void group(final T comparable, final List<Comparator<T>> comparators) {

		int depth = -1;
		int index = -1;
		int j = 0;

		for (int i = 0; i < comparators.size(); i++) {
			depth = -1;
			j = i;

			final List<T> groups = _callback.availableGroups(i, comparable);

			final Comparator<T> tComparator = comparators.get(i);
			Collections.sort(groups, tComparator);
			index = Collections.binarySearch(groups, comparable, tComparator);

			// FIXME make dynamic
			if (i == 0 && index < 0) { // if top 1st level group does not exists break iteration
				depth = i;
				break;
			} else if (i == 1 && index < 0) { // if 2nd level group does not exists break iteration
				depth = i;
				break;
			} else if (i == 2 && index < 0) { // if 3rd level group does not exists break iteration
				depth = i;
				break;
			} else if (i == 3 && index < 0) { // if 4th level group does not exists break iteration
				depth = i;
				break;
			} else if (i == 4 && index < 0) { // if 5th level group does not exists break iteration
				depth = i;
				break;
			} else { // addToGroup
				//parentIndex = index;
				depth = i;
			}
		}


		/*System.err.println("\n===OOOPS \nindex: " + index + " level: " + level + " i: " + j);
					System.err.println("Classname: " + ((Bug) comparable).getInstance().getPrimaryClass().getClassName().split("\\$")[0]);
					System.err.println("Category: " + I18N.instance().getBugCategoryDescription(((Bug) comparable).getInstance().getBugPattern().getCategory()));
					System.err.println("Type: " + I18N.instance().getBugTypeDescription(((Bug) comparable).getInstance().getBugPattern().getAbbrev()));
					System.err.println("Short: " + ((Bug) comparable).getInstance().getBugPattern().getShortDescription());*/

		int parentIndex = -1;
		if (index < 0 && depth == 0) { // top level group ##  && level == -1
			//System.err.println("\n= StartGroup =\nindex: " + index + " depth: " + depth + " i: " + j);
			//System.err.println("Classname: " + ((Bug) comparable).getInstance().getPrimaryClass().getClassName().split("\\$")[0]);
			/*System.err.println("Category: " + I18N.instance().getBugCategoryDescription(((Bug) comparable).getInstance().getBugPattern().getCategory()));
			System.err.println("Type: " + I18N.instance().getBugTypeDescription(((Bug) comparable).getInstance().getBugPattern().getAbbrev()));
			System.err.println("Short: " + ((Bug) comparable).getInstance().getBugPattern().getShortDescription());*/
			//final T parent = groups.get(index);
			_callback.startGroup(comparable, depth);

		} else if (index < 0 && depth > 0) { // x level group

/*
			final Comparator<T> c = comparators.get(0);// depth-1
			Collections.sort(groups, c);
			parentIndex = Collections.binarySearch(groups, comparable, c);

			// FIXME: multilevel comparator:  by depth-comparators.size(); for (int y = depth; y < comparators.size(); y++) {
			final T parent = groups.get(parentIndex);
			System.err.println("Parnet: " + parent);
			_callback.startSubGroup(depth, comparable, parent);*/
			final Comparator<T> c = _callback.currentGroupComparatorChain(depth - 1);

			final List<T> groups = _callback.availableGroups(depth - 1, comparable);
			Collections.sort(groups, c); // FIXME: comparators.get(depth-1) ???
			parentIndex = Collections.binarySearch(groups, comparable, comparators.get(depth - 1)); // FIXME: comparators.get(depth-1) ???

			if (LOGGER.isDebugEnabled()) {
				System.err.println("\n== StartSubGroup ==\nindex: " + index + " depth: " + depth + " i: " + j);
				System.err.println("Classname: " + ((Bug) comparable).getInstance().getPrimaryClass().getClassName().split("\\$")[0]);
				System.err.println("PAckage: " + ((Bug) comparable).getInstance().getPrimaryClass().getPackageName());
				System.err.println("Message: " + ((Bug) comparable).getInstance().getMessage());
				System.err.println("Category: " + I18N.instance().getBugCategoryDescription(((Bug) comparable).getInstance().getBugPattern().getCategory()));
				System.err.println("Type: " + I18N.instance().getBugTypeDescription(((Bug) comparable).getInstance().getBugPattern().getAbbrev()));
				System.err.println("Short: " + ((Bug) comparable).getInstance().getBugPattern().getShortDescription());
			}

			final T parent = groups.get(parentIndex);


			if (LOGGER.isDebugEnabled()) {
				System.err.println("ParentIndex: " + parentIndex);
				System.err.println("ParentClassname: " + ((Bug) parent).getInstance().getPrimaryClass().getClassName().split("\\$")[0]);
				System.err.println("ParentCategory: " + I18N.instance().getBugCategoryDescription(((Bug) parent).getInstance().getBugPattern().getCategory()));
				System.err.println("ParentType: " + I18N.instance().getBugTypeDescription(((Bug) parent).getInstance().getBugPattern().getAbbrev()));
				System.err.println("PArentShort: " + ((Bug) parent).getInstance().getBugPattern().getShortDescription());
			}


			_callback.startSubGroup(depth, comparable, parent);
		} else if (index >= 0) {
			if (LOGGER.isDebugEnabled()) {
				System.err.println("\n#### AddToGroup");
				System.err.println("=== index: " + index + " depth: " + depth + " i: " + j);
				System.err.println("Classname: " + ((Bug) comparable).getInstance().getPrimaryClass().getClassName().split("\\$")[0]);
				System.err.println("Classname: " + ((Bug) comparable).getInstance().getPrimaryClass().getClassName());
				System.err.println("Category: " + I18N.instance().getBugCategoryDescription(((Bug) comparable).getInstance().getBugPattern().getCategory()));
				System.err.println("Type: " + I18N.instance().getBugTypeDescription(((Bug) comparable).getInstance().getBugPattern().getAbbrev()));
				System.err.println("Short: " + ((Bug) comparable).getInstance().getBugPattern().getShortDescription());
				System.err.println("PriorityAbb: " + ((Bug) comparable).getInstance().getPriorityAbbreviation());
				System.err.println("PriorityString: " + ((Bug) comparable).getInstance().getPriorityString());
				System.err.println("PriorityTypeString: " + ((Bug) comparable).getInstance().getPriorityTypeString());
			}

			final Comparator<T> c = _callback.currentGroupComparatorChain(depth); // FIXME: -1 ???

			final List<T> groups = _callback.availableGroups(depth, comparable); // FIXME: -1 ???
			Collections.sort(groups, c); // FIXME: -1 ???
			parentIndex = Collections.binarySearch(groups, comparable, c); // FIXME: -1 ???
			final T parent = groups.get(parentIndex);

			if (LOGGER.isDebugEnabled()) {
				System.err.println("ParentIndex: " + parentIndex);
				System.err.println("ParentClassname: " + ((Bug) parent).getInstance().getPrimaryClass().getClassName().split("\\$")[0]);
				System.err.println("ParentCategory: " + I18N.instance().getBugCategoryDescription(((Bug) parent).getInstance().getBugPattern().getCategory()));
				System.err.println("ParentType: " + I18N.instance().getBugTypeDescription(((Bug) parent).getInstance().getBugPattern().getAbbrev()));
				System.err.println("PArentShort: " + ((Bug) parent).getInstance().getBugPattern().getShortDescription());
			}

			_callback.addToGroup(depth, comparable, parent);
		}


	}