content: package org.flashtool.flashsystem;
  
  import java.util.Iterator;
  import java.util.Set;
  import java.util.Vector;
  
  import org.flashtool.parsers.sin.SinFile;
  import org.flashtool.util.MyTreeSet;
  
  public class BundleMetaData {
  
  	MyTreeSet<Category> _categwipe = new MyTreeSet<Category>();
  	MyTreeSet<Category> _categex = new MyTreeSet<Category>();
  	Category loader=null;
  	Category fsc=null;
  	Vector<String> noerase = new Vector<String>();
  	
  	public BundleMetaData() {
  	}
  
  	public String getNoEraseAsString() {
  		return noerase.toString().replace("[", "").replace("]", "").replace(" ", "");
  	}
  	
  	public void setNoErase(String noerase) {
  		if (noerase!=null) {
  			if (noerase.toUpperCase().equals(noerase)) {
  				String tovect[] = noerase.split(",");
  				for (int i=0;i<tovect.length;i++)
  					this.noerase.addElement(tovect[i]);
  			}
  			else {
  				String noerasecateg="";
  				String lnoerase[]=noerase.split(",");
  				for (int i=0;i<lnoerase.length;i++) {
  					this.noerase.addElement(SinFile.getShortName(lnoerase[i]).toUpperCase());
  				}
  			}
  		}
  		if (this.noerase.size()==0) {
  			this.noerase.addElement("APPS_LOG");
  			this.noerase.addElement("USERDATA");
  			this.noerase.addElement("SSD");
  			this.noerase.addElement("DIAG");
  			this.noerase.addElement("B2B");
  		}
  		this.noerase.addElement("SIMLOCK");
  	}
  	
  	public Category getLoader() {
  		return loader;
  	}
  	
  	public Category getFsc() {
  		return fsc;
  	}
  	
  	public Set<Category> getWipe() {
  		return _categwipe;
  	}
  
  	public Set<Category> getExclude() {
  		return _categex;
  	}
  	
  	public Set<Category> getAllEntries(boolean checked) {
  		MyTreeSet<Category> _categ = new MyTreeSet<Category>();
  		Iterator<Category> i = getExclude().iterator();
  		while (i.hasNext()) {
  			Category c = i.next();
  			if (checked) {
  				if (c.isEnabled()) _categ.add(c);
  			}
  			else _categ.add(c);
  		}
  		i = getWipe().iterator();
  		while (i.hasNext()) {
  			Category c = i.next();
  			if (checked) {
  				if (c.isEnabled()) _categ.add(c);
  			}
  			else _categ.add(c);
  		}
  		return _categ;
  	}
  
  	public Set<Category> getTAEntries(boolean checked) {
  		MyTreeSet<Category> _categ = new MyTreeSet<Category>();
  		Iterator<Category> i = getExclude().iterator();
  		while (i.hasNext()) {
  			Category c = i.next();
  			if (checked) {
  				if (c.isEnabled()) _categ.add(c);
  			}
  			else _categ.add(c);
  		}
  		i = getWipe().iterator();
  		while (i.hasNext()) {
  			Category c = i.next();
  			if (checked) {
  				if (c.isEnabled()) _categ.add(c);
  			}
  			else _categ.add(c);
  		}
  		return _categ;
  	}
  
  	public void setLoader(BundleEntry f) throws Exception {
  		Category cat = new Category();
  		cat.setId(f.getCategory());
  		cat.addEntry(f);
  		loader=cat;
  	}
  
  	public void setFsc(BundleEntry f) throws Exception {
  		Category cat = new Category();
  		cat.setId(f.getCategory());
  		cat.addEntry(f);
  		fsc=cat;
  	}
  
  	public void process(BundleEntry f) throws Exception {
  		if (f.getName().equals("fwinfo.xml")) return;
  		Category cat = new Category();
  		cat.setId(f.getCategory());
  		cat.addEntry(f);
  
  		if (cat.getId().equals("LOADER")) {
  			loader=cat;
  			return;
  		}
  
  		if (cat.getId().equals("FSC")) {
  			fsc=cat;
  			return;
  		}
  
  		if (noerase.contains(cat.getId())){
  			cat.setEnabled(false);
  			_categwipe.add(cat);
  		}
  		else {
  			cat.setEnabled(true);
  			_categex.add(cat);
  		}
  	}
  
  	public void setCategEnabled(String categ, boolean enabled) {
  		Category c = _categex.get(categ);
  		if (c==null) c = _categwipe.get(categ);
  		if (c!=null) c.setEnabled(enabled);
  	}
  
  	public void remove(BundleEntry f) {
  		if (f.getCategory().equals("LOADER")) {
  			loader=null;
  			return;
  		}
  		if (f.getCategory().equals("FSC")) {
  			fsc=null;
  			return;
  		}
  		try {
  			_categex.remove(get(f.getCategory()));
  		} catch (Exception e) {}
  		try {
  			_categwipe.remove(get(f.getCategory()));
  		} catch (Exception e) {}
  	}
  
  	public Category get(String categ) {
  		Category c = _categex.get(categ);
  		if (c==null) c = _categwipe.get(categ);
  		return c;
  	}
  
  	public void clear() {
  		_categex.clear();
  		_categwipe.clear();
  	}
  
  }