001: /*******************************************************************************
002: * Copyright (c) 2005, 2006 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.pde.internal.core.target;
011:
012: import java.io.PrintWriter;
013: import java.util.ArrayList;
014: import java.util.HashMap;
015: import java.util.Iterator;
016: import java.util.Map;
017:
018: import org.eclipse.pde.internal.core.itarget.IImplicitDependenciesInfo;
019: import org.eclipse.pde.internal.core.itarget.ITargetModel;
020: import org.eclipse.pde.internal.core.itarget.ITargetPlugin;
021: import org.w3c.dom.Node;
022: import org.w3c.dom.NodeList;
023:
024: public class ImplicitDependenciesInfo extends TargetObject implements
025: IImplicitDependenciesInfo {
026:
027: private static final long serialVersionUID = 1L;
028:
029: Map fPlugins = new HashMap();
030:
031: public ImplicitDependenciesInfo(ITargetModel model) {
032: super (model);
033: }
034:
035: public ITargetPlugin[] getPlugins() {
036: return (ITargetPlugin[]) fPlugins.values().toArray(
037: new ITargetPlugin[fPlugins.size()]);
038: }
039:
040: public void addPlugin(ITargetPlugin plugin) {
041: addPlugins(new ITargetPlugin[] { plugin });
042: }
043:
044: public void addPlugins(ITargetPlugin[] plugins) {
045: ArrayList addedPlugins = new ArrayList();
046: for (int i = 0; i < plugins.length; i++) {
047: String id = plugins[i].getId();
048: if (fPlugins.containsKey(id))
049: continue;
050: plugins[i].setModel(getModel());
051: fPlugins.put(id, plugins[i]);
052: addedPlugins.add(plugins[i]);
053: }
054: if (isEditable() && (addedPlugins.size() > 0)) {
055: firePropertyChanged(P_IMPLICIT_PLUGINS,
056: new ITargetPlugin[0],
057: (ITargetPlugin[]) addedPlugins
058: .toArray(new ITargetPlugin[addedPlugins
059: .size()]));
060: }
061:
062: }
063:
064: public void removePlugin(ITargetPlugin plugin) {
065: removePlugins(new ITargetPlugin[] { plugin });
066: }
067:
068: public void removePlugins(ITargetPlugin[] plugins) {
069: ArrayList removedPlugins = new ArrayList();
070: for (int i = 0; i < plugins.length; i++)
071: if (fPlugins.remove(plugins[i].getId()) != null)
072: removedPlugins.add(plugins[i]);
073: if (isEditable() && (removedPlugins.size() > 0))
074: firePropertyChanged(P_IMPLICIT_PLUGINS,
075: (ITargetPlugin[]) removedPlugins
076: .toArray(new ITargetPlugin[removedPlugins
077: .size()]), new ITargetPlugin[0]);
078: }
079:
080: public void parse(Node node) {
081: NodeList children = node.getChildNodes();
082: for (int i = 0; i < children.getLength(); i++) {
083: Node child = children.item(i);
084: if (child.getNodeName().equals("plugin")) { //$NON-NLS-1$
085: ITargetPlugin plugin = getModel().getFactory()
086: .createPlugin();
087: plugin.parse(child);
088: fPlugins.put(plugin.getId(), plugin);
089: }
090: }
091:
092: }
093:
094: public void write(String indent, PrintWriter writer) {
095: if (fPlugins.size() == 0)
096: return;
097: writer.println();
098: writer.println(indent + "<implicitDependencies>"); //$NON-NLS-1$
099: Iterator it = fPlugins.values().iterator();
100: while (it.hasNext()) {
101: TargetPlugin plugin = (TargetPlugin) it.next();
102: plugin.write(indent + " ", writer); //$NON-NLS-1$
103: }
104: writer.println(indent + "</implicitDependencies>"); //$NON-NLS-1$
105: }
106:
107: public boolean containsPlugin(String id) {
108: return fPlugins.containsKey(id);
109: }
110:
111: }
|