// Path: se/sics/mspsim/util/ComponentRegistry.java
// public class ComponentRegistry {
// 
//     private ArrayList<ComponentEntry> components = new ArrayList<ComponentEntry>();
//     private boolean running = false;
// 
//     private synchronized ComponentEntry[] getAllEntries() {
//         return components.toArray(new ComponentEntry[components.size()]);
//     }
// 
//     public void registerComponent(String name, Object component) {
//         if (name == null || component == null) {
//             throw new NullPointerException();
//         }
//         synchronized (this) {
//             components.add(new ComponentEntry(name, component));
//         }
//         if (component instanceof ActiveComponent) {
//             ((ActiveComponent)component).init(name, this);
//             if (running) {
//                 ((ActiveComponent)component).start();
//             }
//         } else if (component instanceof ServiceComponent) {
//             ((ServiceComponent)component).init(name, this);
//         }
//     }
// 
//     public synchronized Object getComponent(String name) {
//         for (ComponentEntry entry : components) {
//             if (name.equals(entry.name)) {
//                 return entry.component;
//             }
//         }
//         return null;
//     }
// 
//     public synchronized boolean removeComponent(String name) {
//       ComponentEntry rem = null;
//         for (ComponentEntry entry : components) {
//             if (name.equals(entry.name)) {
//               rem = entry;
//               break;
//             }
//         }
//         if (rem == null) {
//           return false;
//         }
//         components.remove(rem);
//         return true;
//     }
// 
//     public synchronized Object[] getAllComponents(String name) {
//         ArrayList<Object> list = new ArrayList<Object>();
//         for (ComponentEntry entry : components) {
//             if (name.equals(entry.name)) {
//                 list.add(entry.component);
//             }
//         }
//         return list.toArray();
//     }
// 
//     public synchronized <T> T getComponent(Class<T> type, String name) {
//         for (ComponentEntry entry : components) {
//             if (type.isInstance(entry.component) && name.equals(entry.name)) {
//                 return type.cast(entry.component);
//             }
//         }
//         return null;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public synchronized <T> T[] getAllComponents(Class<T> type, String name) {
//         ArrayList<T> list = new ArrayList<T>();
//         for (ComponentEntry entry : components) {
//             if (type.isInstance(entry.component) && name.equals(entry.name)) {
//                 list.add(type.cast(entry.component));
//             }
//         }
//         return list.toArray((T[]) java.lang.reflect.Array.newInstance(type, list.size()));
//     }
// 
//     public synchronized <T> T getComponent(Class<T> type) {
//         for (ComponentEntry entry : components) {
//             if (type.isInstance(entry.component)) {
//                 return type.cast(entry.component);
//             }
//         }
//         return null;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public synchronized <T> T[] getAllComponents(Class<T> type) {
//         ArrayList<T> list = new ArrayList<T>();
//         for (ComponentEntry entry : components) {
//             if (type.isInstance(entry.component)) {
//                 list.add(type.cast(entry.component));
//             }
//         }
//         return list.toArray((T[]) java.lang.reflect.Array.newInstance(type, list.size()));
//     }
// 
//     public void start() {
//         ComponentEntry[] plugs;
//         synchronized (this) {
//             running = true;
//             plugs = getAllEntries();
//         }
// 
//         for (ComponentEntry entry : plugs) {
//             if (entry.component instanceof ActiveComponent) {
//                 ((ActiveComponent) entry.component).start();
//             }
//         }
//     }
// 
//     public void printRegistry(PrintStream out) {
//         ComponentEntry[] plugs = getAllEntries();
//         out.printf("%-22s %s\n", "Component Name", "Component Class");
//         out.println("----------------------------------------------");
//         for (ComponentEntry entry : plugs) {
//             out.printf("%-22s %s\n", entry.name, entry.component.getClass().getName());
//         }
//     }
// 
//     private static class ComponentEntry {
//         public final String name;
//         public final Object component;
// 
//         private ComponentEntry(String name, Object component) {
//             this.name = name;
//             this.component = component;
//         }
//     }
// 
// }


import java.util.Hashtable;
import se.sics.mspsim.util.ComponentRegistry;
package se.sics.mspsim.cli;



public class FileCommands implements CommandBundle {

    private final Hashtable <String,Target> fileTargets = new Hashtable<String,Target>();

// Path: se/sics/mspsim/util/ComponentRegistry.java
// public class ComponentRegistry {
// 
//     private ArrayList<ComponentEntry> components = new ArrayList<ComponentEntry>();
//     private boolean running = false;
// 
//     private synchronized ComponentEntry[] getAllEntries() {
//         return components.toArray(new ComponentEntry[components.size()]);
//     }
// 
//     public void registerComponent(String name, Object component) {
//         if (name == null || component == null) {
//             throw new NullPointerException();
//         }
//         synchronized (this) {
//             components.add(new ComponentEntry(name, component));
//         }
//         if (component instanceof ActiveComponent) {
//             ((ActiveComponent)component).init(name, this);
//             if (running) {
//                 ((ActiveComponent)component).start();
//             }
//         } else if (component instanceof ServiceComponent) {
//             ((ServiceComponent)component).init(name, this);
//         }
//     }
// 
//     public synchronized Object getComponent(String name) {
//         for (ComponentEntry entry : components) {
//             if (name.equals(entry.name)) {
//                 return entry.component;
//             }
//         }
//         return null;
//     }
// 
//     public synchronized boolean removeComponent(String name) {
//       ComponentEntry rem = null;
//         for (ComponentEntry entry : components) {
//             if (name.equals(entry.name)) {
//               rem = entry;
//               break;
//             }
//         }
//         if (rem == null) {
//           return false;
//         }
//         components.remove(rem);
//         return true;
//     }
// 
//     public synchronized Object[] getAllComponents(String name) {
//         ArrayList<Object> list = new ArrayList<Object>();
//         for (ComponentEntry entry : components) {
//             if (name.equals(entry.name)) {
//                 list.add(entry.component);
//             }
//         }
//         return list.toArray();
//     }
// 
//     public synchronized <T> T getComponent(Class<T> type, String name) {
//         for (ComponentEntry entry : components) {
//             if (type.isInstance(entry.component) && name.equals(entry.name)) {
//                 return type.cast(entry.component);
//             }
//         }
//         return null;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public synchronized <T> T[] getAllComponents(Class<T> type, String name) {
//         ArrayList<T> list = new ArrayList<T>();
//         for (ComponentEntry entry : components) {
//             if (type.isInstance(entry.component) && name.equals(entry.name)) {
//                 list.add(type.cast(entry.component));
//             }
//         }
//         return list.toArray((T[]) java.lang.reflect.Array.newInstance(type, list.size()));
//     }
// 
//     public synchronized <T> T getComponent(Class<T> type) {
//         for (ComponentEntry entry : components) {
//             if (type.isInstance(entry.component)) {
//                 return type.cast(entry.component);
//             }
//         }
//         return null;
//     }
// 
//     @SuppressWarnings("unchecked")
//     public synchronized <T> T[] getAllComponents(Class<T> type) {
//         ArrayList<T> list = new ArrayList<T>();
//         for (ComponentEntry entry : components) {
//             if (type.isInstance(entry.component)) {
//                 list.add(type.cast(entry.component));
//             }
//         }
//         return list.toArray((T[]) java.lang.reflect.Array.newInstance(type, list.size()));
//     }
// 
//     public void start() {
//         ComponentEntry[] plugs;
//         synchronized (this) {
//             running = true;
//             plugs = getAllEntries();
//         }
// 
//         for (ComponentEntry entry : plugs) {
//             if (entry.component instanceof ActiveComponent) {
//                 ((ActiveComponent) entry.component).start();
//             }
//         }
//     }
// 
//     public void printRegistry(PrintStream out) {
//         ComponentEntry[] plugs = getAllEntries();
//         out.printf("%-22s %s\n", "Component Name", "Component Class");
//         out.println("----------------------------------------------");
//         for (ComponentEntry entry : plugs) {
//             out.printf("%-22s %s\n", entry.name, entry.component.getClass().getName());
//         }
//     }
// 
//     private static class ComponentEntry {
//         public final String name;
//         public final Object component;
// 
//         private ComponentEntry(String name, Object component) {
//             this.name = name;
//             this.component = component;
//         }
//     }
// 
// }


// Path: se/sics/mspsim/cli/FileCommands.java
import java.util.Hashtable;
import se.sics.mspsim.util.ComponentRegistry;

package se.sics.mspsim.cli;



public class FileCommands implements CommandBundle {

    private final Hashtable <String,Target> fileTargets = new Hashtable<String,Target>();

    public void setupCommands(final ComponentRegistry registry, CommandHandler handler) {