/* * Created on 09.11.2006 * * Copyright (c) 2006, PMD for Eclipse Development Team * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * The end-user documentation included with the redistribution, if * any, must include the following acknowledgement: * "This product includes software developed in part by support from * the Defense Advanced Research Project Agency (DARPA)" * * Neither the name of "PMD for Eclipse Development Team" nor the names of its * contributors may be used to endorse or promote products derived from * this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package net.sourceforge.pmd.eclipse.ui.model; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; /** * * @author Sven * */ public class MarkerRecord extends AbstractPMDRecord { private AbstractPMDRecord[] children; private final FileRecord parent; private final String ruleName; private final int priority; private final List<IMarker> markers; /** * Constructor. * * @param javaResource the given File */ public MarkerRecord(FileRecord parent, String ruleName, int priority) { super(); this.parent = parent; this.ruleName = ruleName; this.priority = priority; this.markers = new ArrayList<IMarker>(); this.children = EMPTY_RECORDS; } public void addViolation(IMarker marker) { this.markers.add(marker); } public int getViolationsCounted() { return markers.size(); } /* * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#addResource(org.eclipse.core.resources.IResource) */ @Override public AbstractPMDRecord addResource(IResource resource) { return null; } public void updateChildren() { this.children = createChildren(); } /* * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#createChildren() */ @Override public final AbstractPMDRecord[] createChildren() { final List<AbstractPMDRecord> children = new ArrayList<AbstractPMDRecord>(); final List<AbstractPMDRecord> markers = parent.getParent().findResourcesByName(this.ruleName, TYPE_MARKER); final Iterator<AbstractPMDRecord> markerIterator = markers.iterator(); while (markerIterator.hasNext()) { final MarkerRecord marker = (MarkerRecord) markerIterator.next(); children.add(new FileToMarkerRecord(marker)); // NOPMD by Sven on 13.11.06 12:05 } return children.toArray(new AbstractPMDRecord[children.size()]); } /* * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#getChildren() */ @Override public AbstractPMDRecord[] getChildren() { return children; // NOPMD by Sven on 13.11.06 12:05 } /* * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#getName() */ @Override public String getName() { return ruleName; } public int getPriority() { return priority; } /* * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#getParent() */ @Override public AbstractPMDRecord getParent() { return parent; } /* * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#getResource() */ @Override public IResource getResource() { return parent.getResource(); } /* * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#getResourceType() */ @Override public int getResourceType() { return TYPE_MARKER; } /* * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#removeResource(org.eclipse.core.resources.IResource) */ @Override public AbstractPMDRecord removeResource(IResource resource) { return null; } @Override public boolean hasMarkers() { return markers.size() > 0; } @Override public IMarker[] findMarkers() { return markers.toArray(new IMarker[markers.size()]); } /** * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#getNumberOfViolationsToPriority(int) */ @Override public int getNumberOfViolationsToPriority(int prio, boolean invertMarkerAndFileRecords) { int number = 0; if (prio == priority) { if (invertMarkerAndFileRecords) { for (AbstractPMDRecord element : children) { number += element.getNumberOfViolationsToPriority(prio, false); } } else { number = getViolationsCounted(); } } return number; } /* (non-Javadoc) * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#getLOC() */ @Override public int getLOC() { return parent.getLOC(); } /* (non-Javadoc) * @see net.sourceforge.pmd.eclipse.ui.model.AbstractPMDRecord#getNumberOfMethods() */ @Override public int getNumberOfMethods() { return parent.getNumberOfMethods(); } }