/******************************************************************************* * Copyright (c) 2004, 2010 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM - Initial API and implementation *******************************************************************************/ package org.eclipse.cdt.make.internal.ui.scannerconfig; import java.util.ArrayList; import java.util.Arrays; import org.eclipse.core.resources.IProject; /** * Similar to CPElement. Describes discovered paths and symbols available * through DiscoveredPathInfo instead of CPathEntry. * * @deprecated as of CDT 4.0. This class was used to set preferences/properties * for 3.X style projects. * * @author vhirsl */ @Deprecated public class DiscoveredElement { public static final int CONTAINER = 1; public static final int INCLUDE_PATH = 2; public static final int SYMBOL_DEFINITION = 3; public static final int INCLUDE_FILE = 4; public static final int MACROS_FILE = 5; public static final int PATHS_GROUP = 10; public static final int SYMBOLS_GROUP = 11; public static final int INCLUDE_FILE_GROUP = 12; public static final int MACROS_FILE_GROUP = 13; private IProject fProject; private String fEntry; private int fEntryKind; private boolean fRemoved; private ArrayList<DiscoveredElement> fChildren = new ArrayList<DiscoveredElement>(); private DiscoveredElement fParent; public DiscoveredElement(IProject project, String entry, int kind, boolean removed, boolean system) { fProject = project; fEntry = entry; fEntryKind = kind; fRemoved = removed; } public static DiscoveredElement createNew(DiscoveredElement parent, IProject project, String entry, int kind, boolean removed, boolean system) { DiscoveredElement rv = null; int parentKind = 0; switch (kind) { case CONTAINER: { rv = new DiscoveredElement(project, entry, kind, removed, system); DiscoveredElement group = new DiscoveredElement(project, null, PATHS_GROUP, false, false); rv.fChildren.add(group); group.setParent(rv); group = new DiscoveredElement(project, null, SYMBOLS_GROUP, false, false); rv.fChildren.add(group); group.setParent(rv); group = new DiscoveredElement(project, null, INCLUDE_FILE_GROUP, false, false); rv.fChildren.add(group); group.setParent(rv); group = new DiscoveredElement(project, null, MACROS_FILE_GROUP, false, false); rv.fChildren.add(group); group.setParent(rv); } return rv; case INCLUDE_PATH: parentKind = PATHS_GROUP; break; case SYMBOL_DEFINITION: parentKind = SYMBOLS_GROUP; break; case INCLUDE_FILE: parentKind = INCLUDE_FILE_GROUP; break; case MACROS_FILE: parentKind = MACROS_FILE_GROUP; break; } if (parentKind != 0) { if (parent != null) { DiscoveredElement group = null; if (parent.getEntryKind() == parentKind) { group = parent; } else if (parent.getEntryKind() == CONTAINER) { for (DiscoveredElement child : parent.fChildren) { if (child.getEntryKind() == parentKind) { group = child; break; } } } if (group != null) { rv = new DiscoveredElement(project, entry, kind, removed, system); group.fChildren.add(rv); rv.setParent(group); } } } return rv; } /** * @return Returns the fProject. */ public IProject getProject() { return fProject; } /** * @return the fEntry. */ public String getEntry() { return fEntry; } public void setEntry(String entry) { fEntry = entry; } /** * @return Returns the fEntryKind. */ public int getEntryKind() { return fEntryKind; } /** * @param entryKind The fEntryKind to set. */ public void setEntryKind(int entryKind) { fEntryKind = entryKind; } /** * @return Returns the fRemoved. */ public boolean isRemoved() { return fRemoved; } /** * @param removed The fRemoved to set. */ public void setRemoved(boolean removed) { fRemoved = removed; } /** * @return Returns the fParent. */ public DiscoveredElement getParent() { return fParent; } /** * @param parent The fParent to set. */ private void setParent(DiscoveredElement parent) { fParent = parent; } /** * @return children of the discovered element */ public DiscoveredElement[] getChildren() { switch(fEntryKind) { case INCLUDE_PATH: case SYMBOL_DEFINITION: case INCLUDE_FILE: case MACROS_FILE: return new DiscoveredElement[0]; } return fChildren.toArray(new DiscoveredElement[fChildren.size()]); } public boolean hasChildren() { switch(fEntryKind) { case INCLUDE_PATH: case SYMBOL_DEFINITION: case INCLUDE_FILE: case MACROS_FILE: return false; } return (fChildren.size() > 0); } public void setChildren(DiscoveredElement[] children) { fChildren = new ArrayList<DiscoveredElement>(Arrays.asList(children)); } public boolean delete() { boolean rc = false; DiscoveredElement parent = getParent(); if (parent != null) { rc = parent.fChildren.remove(this); for (DiscoveredElement child : fChildren) { child.setParent(null); rc |= true; } } return rc; } }