001: /*******************************************************************************
002: * Copyright (c) 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: ******************************************************************************/package org.eclipse.ui.internal.provisional.views.markers;
011:
012: import org.eclipse.osgi.util.NLS;
013: import org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem;
014: import org.eclipse.ui.views.markers.internal.MarkerMessages;
015:
016: class MarkerCategory extends MarkerItem {
017:
018: int start;
019:
020: int end;
021:
022: private MarkerEntry[] children;
023:
024: private String name;
025:
026: private CachedMarkerBuilder cachedMarkerBuilder;
027:
028: /**
029: * Create a new instance of the receiver that has the markers between
030: * startIndex and endIndex showing.
031: *
032: * @param cachedMarkerBuilder
033: * @param startIndex
034: * @param endIndex
035: * @param cachedMarkerBuilder the builder used to generate the children lazily.
036: */
037: MarkerCategory(CachedMarkerBuilder cachedMarkerBuilder,
038: int startIndex, int endIndex, String categoryName) {
039: this .cachedMarkerBuilder = cachedMarkerBuilder;
040: start = startIndex;
041: end = endIndex;
042: name = categoryName;
043: }
044:
045: /*
046: * (non-Javadoc)
047: *
048: * @see org.eclipse.ui.views.markers.internal.MarkerNode#getChildren()
049: */
050: public MarkerItem[] getChildren() {
051:
052: if (children == null) {
053:
054: // Return nothing while a build is going on as this could be
055: // stale
056: if (this .cachedMarkerBuilder.isBuilding()) {
057: return MarkerSupportInternalUtilities.EMPTY_MARKER_ITEM_ARRAY;
058: }
059:
060: MarkerItem[] allMarkers = cachedMarkerBuilder
061: .getMarkerEntries();
062:
063: int totalSize = getTotalSize();
064: children = new MarkerEntry[totalSize];
065:
066: System.arraycopy(allMarkers, start, children, 0, totalSize);
067:
068: for (int i = 0; i < children.length; i++) {
069: children[i].setCategory(this );
070: }
071: }
072: return children;
073:
074: }
075:
076: /*
077: * (non-Javadoc)
078: *
079: * @see org.eclipse.ui.views.markers.internal.MarkerNode#getParent()
080: */
081: public MarkerItem getParent() {
082: return null;
083: }
084:
085: /*
086: * (non-Javadoc)
087: *
088: * @see org.eclipse.ui.views.markers.internal.MarkerNode#getDescription()
089: */
090: public String getDescription() {
091:
092: return NLS.bind(MarkerMessages.Category_Label, new Object[] {
093: name, String.valueOf(getTotalSize()) });
094:
095: }
096:
097: /**
098: * Get the total size of the receiver.
099: *
100: * @return int
101: */
102: private int getTotalSize() {
103: return end - start + 1;
104: }
105:
106: /*
107: * (non-Javadoc)
108: *
109: * @see org.eclipse.ui.views.markers.internal.MarkerNode#isConcrete()
110: */
111: public boolean isConcrete() {
112: return false;
113: }
114:
115: /*
116: * (non-Javadoc)
117: *
118: * @see org.eclipse.ui.views.markers.internal.MarkerNode#getConcreteRepresentative()
119: */
120: public MarkerEntry getConcreteRepresentative() {
121: return cachedMarkerBuilder.getMarkerEntries()[start];
122: }
123:
124: /**
125: * Return the name of the receiver.
126: *
127: * @return String
128: */
129: public String getName() {
130: return name;
131: }
132:
133: }
|