/** * Copyright (c) 2009-2011, The HATS Consortium. All rights reserved. * This file is licensed under the terms of the Modified BSD License. */ package abs.backend.java.lib.runtime; import java.util.HashSet; import java.util.Set; import abs.backend.java.codegeneration.dynamic.DynamicException; import abs.backend.java.lib.runtime.metaABS.ProductLine; public class ABSDynamicProductLine extends ABSDynamicObject { public ABSDynamicProductLine() { super(ProductLine.singleton()); } private Set<ABSDynamicProduct> products = new HashSet<ABSDynamicProduct>(); private Set<ABSDynamicReconfiguration> reconfigurations = new HashSet<ABSDynamicReconfiguration>(); private ABSDynamicProduct currentProduct = null; public ABSDynamicProduct getCurrentProduct() { if (currentProduct == null) throw new DynamicException("The current system does not represent a product of the SPL. Please specify the initial product when compiling."); else return currentProduct; } public void setCurrentProduct(ABSDynamicProduct prod) { currentProduct = prod; } public ABSDynamicProduct getProduct(String name) { for (ABSDynamicProduct p : products) { if (name.equals(p.getName())) return p; } throw new DynamicException("The DSPL contains no product named " + name + "."); } public void reconfigure(ABSDynamicProduct prod) { ABSDynamicReconfiguration recf = prod.getReconfiguration(prod); for (ABSDynamicDelta delta : recf.getDeltas()) delta.apply(); recf.getUpdate().apply(); setCurrentProduct(prod); } public void addProduct(ABSDynamicProduct prod) { products.add(prod); } public void removeProduct(ABSDynamicProduct prod) { if (products.contains(prod)) products.remove(prod); else throw new DynamicException("The product " + prod.getName() + " is not part of the DSPL and cannot be removed."); } public void addReconfiguration(ABSDynamicReconfiguration recf) { reconfigurations.add(recf); } public void removeReconfiguration(ABSDynamicReconfiguration recf) { if (reconfigurations.contains(recf)) reconfigurations.remove(recf); else throw new DynamicException("The reconfiguration " + recf.getName() + " is not part of the DSPL and cannot be removed."); } }