package net.sf.openrocket.file.openrocket.importt; import java.util.HashMap; import java.util.List; import net.sf.openrocket.aerodynamics.Warning; import net.sf.openrocket.aerodynamics.WarningSet; import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.startup.Application; import net.sf.openrocket.util.Reflection; ////ComponentPresetSetter - sets a ComponentPreset value class ComponentPresetSetter implements Setter { private final Reflection.Method setMethod; public ComponentPresetSetter(Reflection.Method set) { this.setMethod = set; } @Override public void set(RocketComponent c, String name, HashMap<String, String> attributes, WarningSet warnings) { String manufacturerName = attributes.get("manufacturer"); if (manufacturerName == null) { warnings.add(Warning.fromString("Invalid ComponentPreset for component " + c.getName() + ", no manufacturer specified. Ignored")); return; } String productNo = attributes.get("partno"); if (productNo == null) { warnings.add(Warning.fromString("Invalid ComponentPreset for component " + c.getName() + ", no partno specified. Ignored")); return; } String digest = attributes.get("digest"); if (digest == null) { warnings.add(Warning.fromString("Invalid ComponentPreset for component " + c.getName() + ", no digest specified.")); } String type = attributes.get("type"); if (type == null) { warnings.add(Warning.fromString("Invalid ComponentPreset for component " + c.getName() + ", no type specified.")); } List<ComponentPreset> presets = Application.getComponentPresetDao().find(manufacturerName, productNo); ComponentPreset matchingPreset = null; for (ComponentPreset preset : presets) { if (digest != null && preset.getDigest().equals(digest)) { // Found one with matching digest. Take it. matchingPreset = preset; break; } if (type != null && preset.getType().name().equals(type) && matchingPreset != null) { // Found the first one with matching type. matchingPreset = preset; } } // Was any found? if (matchingPreset == null) { warnings.add(Warning.fromString("No matching ComponentPreset for component " + c.getName() + " found matching " + manufacturerName + " " + productNo)); return; } if (digest != null && !matchingPreset.getDigest().equals(digest)) { warnings.add(Warning.fromString("ComponentPreset for component " + c.getName() + " has wrong digest")); } setMethod.invoke(c, matchingPreset); } }