content: package org.flashtool.gui.models;
  
  import java.io.File;
  import java.util.Collections;
  import java.util.Iterator;
  import java.util.LinkedList;
  import java.util.List;
  import java.util.jar.JarFile;
  
  import org.flashtool.gui.TARestore;
  import org.flashtool.gui.tools.FtfFilter;
  import org.flashtool.system.DeviceEntry;
  import org.flashtool.system.Devices;
  
  import lombok.extern.slf4j.Slf4j;
  
  @Slf4j
  public class TreeDevices {
  
  	  private List<TreeDevice> devices;
  	  String devicefilter = "";
  
  	  public TreeDevices(String srcFolder) {
  		  devices = new LinkedList<TreeDevice>();
  		  File dir = new File(srcFolder);
  		  File[] chld = dir.listFiles(new FtfFilter(""));
  		  for(int i = 0; i < chld.length; i++) {
  				try {
  					JarFile jf = new JarFile(chld[i]);
  					String model = jf.getManifest().getMainAttributes().getValue("device");
  					DeviceEntry ent = Devices.getDeviceFromVariant(model);
  					if (ent!=null) {
  						if (contains(ent.getId())) {
  							TreeDevice dev = get(ent.getId());
  							dev.addVariant(chld[i],jf);
  						}
  						else {
  							TreeDevice dev=new TreeDevice(ent.getId(),ent.getName(),chld[i],jf);
  							devices.add(dev);							
  						}
  					}
  					jf.close();
  				}
  				catch (Exception e) {
  					e.printStackTrace();
  				}
  			}
  	  }
  
  	  public void setDeviceFilter(String id) {
  		  devicefilter = id;
  	  }
  	 
  	  public List<TreeDevice> getContent() {
  		  LinkedList<TreeDevice> filtereddevices = new LinkedList<TreeDevice>();
  		  if (devicefilter.length()>0) {
  			  DeviceEntry entry = Devices.getDevice(devicefilter);
  			  Iterator<TreeDevice> i = devices.listIterator();
  			  while (i.hasNext()) {
  				  TreeDevice f = i.next();
  				  if (f.getDevice().equals(devicefilter))
  					  filtereddevices.add(f);
  			  }
  			  return filtereddevices;
  		  }
  		  else
  			  return devices;
  	  }
  
  	  public boolean hasDevices() {
  		  return !getContent().isEmpty();
  	  }
  
  	  public boolean contains(String devid) {
  		  Iterator<TreeDevice> idev = devices.iterator();
  		  while (idev.hasNext()) {
  			  TreeDevice dev = idev.next();
  			  if (dev.getDevice().equals(devid)) return true; 
  		  }
  		  return false;
  	  }
  	  
  	  public TreeDevice get(String devid) {
  		  Iterator<TreeDevice> idev = devices.iterator();
  		  while (idev.hasNext()) {
  			  TreeDevice dev = idev.next();
  			  if (dev.getDevice().equals(devid)) return dev; 
  		  }
  		  return null;		  
  	  }
  	  
  }