@@ -0,0 +1,814 @@
+package org.pfaa.chemica.processing;%0A%0Aimport java.util.Arrays;%0Aimport java.util.Collections;%0Aimport java.util.Map;%0Aimport java.util.Set;%0A%0Aimport org.pfaa.chemica.model.IndustrialMaterial;%0Aimport org.pfaa.chemica.processing.Form;%0A%0Aimport com.google.common.collect.Sets;%0A%0Apublic class CanonicalForms %7B%0A%09private static Map%3CIndustrialMaterial, Set%3CForm%3E%3E formsForMaterial;%0A%09%0A%09public static void register(IndustrialMaterial material, Form... forms) %7B%0A%09%09Set%3CForm%3E materialForms = formsForMaterial.get(material);%0A%09%09if (materialForms == null) %7B%0A%09%09%09materialForms = Sets.newHashSet();%0A%09%09%09formsForMaterial.put(material, materialForms);%0A%09%09%7D%0A%09%09materialForms.addAll(Arrays.asList(forms));%0A%09%7D%0A%09%0A%09public static Set%3CForm%3E of(IndustrialMaterial material) %7B%0A%09%09return Collections.unmodifiableSet(formsForMaterial.get(material));%0A%09%7D%0A%7D%0A

introduce notion of CanonicalForms, inferred from item registration