diff --git a/core/resources-src/datafiles/rocksim_components/semroc/MATERIAL.CSV b/core/resources-src/datafiles/rocksim_components/semroc/MATERIAL.CSV index 6ef5c8c6c..6de068384 100644 --- a/core/resources-src/datafiles/rocksim_components/semroc/MATERIAL.CSV +++ b/core/resources-src/datafiles/rocksim_components/semroc/MATERIAL.CSV @@ -5,3 +5,7 @@ Spiral/Glassine,lb/ft3,53,,,,1,1,1,1,0,1,0,0,1,1,1,1,1,1,,,,,,,,None,0,0 Fiber,lb/ft3,41,,,,1,0,0,0,0,0,0,0,0,1,1,0,0,0,,,,,,,,None,0,0 lite ply,lb/ft3,22,,,Composite,1,0,1,0,0,0,0,0,0,1,1,1,0,0,,,,,,,,None,0,0 Paper,lb/ft3,70,,,,1,1,1,1,0,1,0,1,1,1,1,1,1,1,,,,,,,,None,0,0 +Polyethylene LDPE,lb/ft3,57.7,,,,1,0,0,0,0,0,1,1,0,0,0,0,0,0,,,,,,,,None,0,0 +Rip stop nylon,g/cm2,0.006685,,,,1,0,0,0,0,0,1,1,0,0,0,0,0,0,,,,,,,,None,0,0 +30 Lb. kevlar,g/cm,0.00178,,,,1,0,0,0,1,0,0,0,0,0,0,0,0,0,,,,,,,,None,0,0 +1/16 In. braided nylon,g/cm,0.0102,,,,1,0,0,0,1,0,0,0,0,0,0,0,0,0,,,,,,,,None,0,0 diff --git a/core/src/net/sf/openrocket/gui/preset/ComponentPresetEditor.java b/core/src/net/sf/openrocket/gui/preset/ComponentPresetEditor.java index b7b668ede..b70b5f569 100644 --- a/core/src/net/sf/openrocket/gui/preset/ComponentPresetEditor.java +++ b/core/src/net/sf/openrocket/gui/preset/ComponentPresetEditor.java @@ -60,12 +60,12 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene /** * State variable to keep track of which file was opened, in case it needs to be saved back to that file. */ - private File openedFile = null; +// private File openedFile = null; /** * Last directory; file chooser is set here so user doesn't have to keep navigating to a common area. */ - private File lastDirectory = null; + // private File lastDirectory = null; /** * The table of presets. @@ -80,7 +80,9 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene /** * Flag that indicates if an existing Preset is currently being edited. */ - private boolean editingSelected = false; + // private boolean editingSelected = false; + + private final OpenedFileContext editContext = new OpenedFileContext(); static { trans = new ResourceBundleTranslator("l10n.messages"); @@ -131,8 +133,9 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene else { if (e.getClickCount() == 2) { int row = target.getSelectedRow(); - editingSelected = true; - new PresetEditorDialog(ComponentPresetEditor.this, (ComponentPreset) model.getAssociatedObject(row)).setVisible(true); + editContext.setEditingSelected(true); + new PresetEditorDialog(ComponentPresetEditor.this, + (ComponentPreset) model.getAssociatedObject(row), editContext.getMaterialsLoaded()).setVisible(true); } } } @@ -216,7 +219,7 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene addBtn.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent arg0) { - editingSelected = false; + editContext.setEditingSelected(false); new PresetEditorDialog(ComponentPresetEditor.this).setVisible(true); } }); @@ -237,7 +240,7 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene //Is this a new preset? String description = preset.has(ComponentPreset.DESCRIPTION) ? preset.get(ComponentPreset.DESCRIPTION) : preset.getPartNo(); - if (!editingSelected) { + if (!editContext.isEditingSelected()|| table.getSelectedRow() == -1) { model.addRow(new Object[]{preset.getManufacturer().getDisplayName(), preset.getType().name(), preset.getPartNo(), description, Icons.EDIT_DELETE}, preset); } @@ -251,7 +254,7 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene model.associated.set(row, preset); } } - editingSelected = false; + editContext.setEditingSelected(false); } /** @@ -331,8 +334,8 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene chooser.addChoosableFileFilter(FileHelper.CSV_FILE_FILTER); chooser.setFileFilter(FileHelper.OPEN_ROCKET_COMPONENT_FILTER); chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); - if (lastDirectory != null) { - chooser.setCurrentDirectory(lastDirectory); + if (editContext.getLastDirectory() != null) { + chooser.setCurrentDirectory(editContext.getLastDirectory()); } else { chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory()); @@ -340,7 +343,7 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene int option = chooser.showOpenDialog(ComponentPresetEditor.this); if (option != JFileChooser.APPROVE_OPTION) { - openedFile = null; + editContext.setOpenedFile(null); log.user("User decided not to open, option=" + option); return false; } @@ -352,7 +355,8 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene return false; } - lastDirectory = file.getParentFile(); + editContext.setLastDirectory(file.getParentFile()); + editContext.setMaterialsLoaded(null); List presets = null; if (file.getName().toLowerCase().endsWith(".orc")) { @@ -364,19 +368,20 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene } presets = new ArrayList(); MaterialHolder materialHolder = RocksimComponentFileTranslator.loadAll(presets, file); + editContext.setMaterialsLoaded(materialHolder); } if (presets != null) { for (ComponentPreset next : presets) { notifyResult(next); } - openedFile = file; + editContext.setOpenedFile(file); } } catch (Exception e) { - e.printStackTrace(); JOptionPane.showMessageDialog(ComponentPresetEditor.this, "Unable to open OpenRocket component file: " + file.getName() + " Invalid format. " + e.getMessage()); - openedFile = null; + editContext.setOpenedFile(null); + editContext.setEditingSelected(false); return false; } return true; @@ -408,8 +413,8 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene chooser.addChoosableFileFilter(FileHelper.OPEN_ROCKET_COMPONENT_FILTER); chooser.setFileFilter(FileHelper.OPEN_ROCKET_COMPONENT_FILTER); - if (openedFile != null) { - chooser.setSelectedFile(openedFile); + if (editContext.getOpenedFile() != null) { + chooser.setSelectedFile(editContext.getOpenedFile()); } else { chooser.setCurrentDirectory(((SwingPreferences) Application.getPreferences()).getDefaultDirectory()); @@ -444,4 +449,56 @@ public class ComponentPresetEditor extends JPanel implements PresetResultListene return FileHelper.confirmWrite(file, this) && new OpenRocketComponentSaver().save(file, materials, presets); } + + class OpenedFileContext { + + /** + * State variable to keep track of which file was opened, in case it needs to be saved back to that file. + */ + private File openedFile = null; + + /** + * Last directory; file chooser is set here so user doesn't have to keep navigating to a common area. + */ + private File lastDirectory = null; + + private boolean editingSelected = false; + + private MaterialHolder materialsLoaded = null; + + OpenedFileContext() { + } + + public File getOpenedFile() { + return openedFile; + } + + public void setOpenedFile(final File theOpenedFile) { + openedFile = theOpenedFile; + } + + public File getLastDirectory() { + return lastDirectory; + } + + public void setLastDirectory(final File theLastDirectory) { + lastDirectory = theLastDirectory; + } + + public boolean isEditingSelected() { + return editingSelected; + } + + public void setEditingSelected(final boolean theEditingSelected) { + editingSelected = theEditingSelected; + } + + public MaterialHolder getMaterialsLoaded() { + return materialsLoaded; + } + + public void setMaterialsLoaded(final MaterialHolder theMaterialsLoaded) { + materialsLoaded = theMaterialsLoaded; + } + } } diff --git a/core/src/net/sf/openrocket/gui/preset/MaterialModel.java b/core/src/net/sf/openrocket/gui/preset/MaterialModel.java index a58370ac9..f51f2146b 100644 --- a/core/src/net/sf/openrocket/gui/preset/MaterialModel.java +++ b/core/src/net/sf/openrocket/gui/preset/MaterialModel.java @@ -6,6 +6,7 @@ import net.sf.openrocket.database.Databases; import net.sf.openrocket.gui.dialogs.CustomMaterialDialog; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.material.Material; +import net.sf.openrocket.preset.loader.MaterialHolder; import net.sf.openrocket.startup.Application; import javax.swing.DefaultComboBoxModel; @@ -27,9 +28,16 @@ public class MaterialModel extends DefaultComboBoxModel implements DatabaseListe private Component parent; - public MaterialModel(Component theParent, Material.Type type) { + public MaterialModel(Component theParent, Material.Type theType, Database materials) { parent = theParent; - this.type = type; + type = theType; + database = materials; + database.addDatabaseListener(this); + } + + public MaterialModel(Component theParent, Material.Type theType) { + parent = theParent; + type = theType; switch (type) { case LINE: @@ -123,4 +131,8 @@ public class MaterialModel extends DefaultComboBoxModel implements DatabaseListe public Material.Type getType() { return type; } + + public void removeListener() { + database.removeChangeListener(this); + } } diff --git a/core/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java b/core/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java index 055cf6ba0..00c2c6f5c 100644 --- a/core/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java +++ b/core/src/net/sf/openrocket/gui/preset/PresetEditorDialog.java @@ -11,12 +11,15 @@ import net.sf.openrocket.motor.Manufacturer; import net.sf.openrocket.preset.ComponentPreset; import net.sf.openrocket.preset.ComponentPresetFactory; import net.sf.openrocket.preset.InvalidComponentPresetException; +import net.sf.openrocket.preset.TypedKey; import net.sf.openrocket.preset.TypedPropertyMap; +import net.sf.openrocket.preset.loader.MaterialHolder; import net.sf.openrocket.rocketcomponent.Transition; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.UnitGroup; import javax.imageio.ImageIO; +import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; import javax.swing.ImageIcon; import javax.swing.InputVerifier; @@ -74,7 +77,8 @@ public class PresetEditorDialog extends JDialog implements ItemListener { private final JPanel contentPanel = new JPanel(); private DeselectableComboBox typeCombo; private JTextField mfgTextField; - private JComboBox materialChooser; + private MaterialChooser materialChooser; + private MaterialHolder holder = null; private JTextField ncPartNoTextField; private JTextField ncDescTextField; @@ -171,7 +175,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener { private JTextField pcLineCount; private DoubleModel pcDiameter; private DoubleModel pcLineLength; - private JComboBox pcLineMaterialChooser; + private MaterialChooser pcLineMaterialChooser; private DoubleModel pcMass; private ImageIcon pcImage; private JButton pcImageBtn; @@ -215,7 +219,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener { * @param theCallback the listener that gets the results of editing the presets */ public PresetEditorDialog(PresetResultListener theCallback) { - this(theCallback, null); + this(theCallback, null, null); } /** @@ -223,8 +227,9 @@ public class PresetEditorDialog extends JDialog implements ItemListener { * * @param theCallback the listener that gets the results of editing the presets * @param toEdit the ComponentPreset to be edited; or null if a new one is being added + * @param matHolder the set of materials; if null then use system materials */ - public PresetEditorDialog(PresetResultListener theCallback, ComponentPreset toEdit) { + public PresetEditorDialog(PresetResultListener theCallback, ComponentPreset toEdit, MaterialHolder matHolder) { resultListener = theCallback; getContentPane().setMinimumSize(new Dimension(200, 200)); setBounds(100, 100, 825, 610); @@ -255,7 +260,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener { JLabel bhMaterialLabel = new JLabel("Material:"); contentPanel.add(bhMaterialLabel, "cell 2 2, alignx left"); - materialChooser = new JComboBox(new MaterialModel(this, Material.Type.BULK)); + materialChooser = new MaterialChooser(new MaterialModel(this, Material.Type.BULK)); contentPanel.add(materialChooser, "cell 3 2,growx"); @@ -413,7 +418,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener { spin = new JSpinner(trAftDia.getSpinnerModel()); spin.setEditor(new SpinnerEditor(spin)); trPanel.add(spin, "cell 1 3, growx"); - trPanel.add(new UnitSelector(trAftDia)); + trPanel.add(new UnitSelector(trAftDia), "growx"); JLabel trForeDiaLabel = new JLabel("Fore Dia.:"); trPanel.add(trForeDiaLabel, "cell 3 3,alignx left"); @@ -1028,7 +1033,6 @@ public class PresetEditorDialog extends JDialog implements ItemListener { JPanel pcPanel = new JPanel(); componentOverlayPanel.add(pcPanel, "PARACHUTE"); pcPanel.setLayout(new MigLayout("", "[][157.00,grow 79][65.00][grow][][]", "[][][][][][]")); - //pcPanel.setLayout(new MigLayout("", "[][grow][][grow]", "[][][][]")); JLabel pcPartNoLabel = new JLabel("Part No:"); pcPanel.add(pcPartNoLabel, "cell 0 0,alignx left"); @@ -1089,7 +1093,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener { JLabel pcLineMaterialLabel = new JLabel("Line Material:"); pcPanel.add(pcLineMaterialLabel, "cell 3 4,alignx left, aligny top, pad 7 0 0 0 "); - pcLineMaterialChooser = new JComboBox(); + pcLineMaterialChooser = new MaterialChooser(); pcLineMaterialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.LINE)); pcPanel.add(pcLineMaterialChooser, "cell 4 4, span 3 1, growx, aligny top"); @@ -1151,8 +1155,9 @@ public class PresetEditorDialog extends JDialog implements ItemListener { buttonPane.add(cancelButton, "cell 6 0,alignx right,aligny top"); if (toEdit != null) { - fillEditor(toEdit); + fillEditor(toEdit, matHolder); } + holder = matHolder; } /** @@ -1187,17 +1192,6 @@ public class PresetEditorDialog extends JDialog implements ItemListener { chooser.addPropertyChangeListener(preview); chooser.setAcceptAllFileFilterUsed(false); chooser.addChoosableFileFilter(new FileNameExtensionFilter("Image Files", "png", "jpg", "jpeg")); - /*{ - @Override - public boolean accept(final File f) { - return f.getName().endsWith(".png") || f.getName().endsWith(".jpg"); - } - - @Override - public String getDescription() { - return "Image Files"; - } - });*/ return chooser; } @@ -1206,12 +1200,11 @@ public class PresetEditorDialog extends JDialog implements ItemListener { * * @param preset the preset to edit */ - private void fillEditor(ComponentPreset preset) { + private void fillEditor(ComponentPreset preset, MaterialHolder holder) { ComponentPreset.Type t = preset.getType(); mfgTextField.setText(preset.get(ComponentPreset.MANUFACTURER).getDisplayName()); - materialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.BULK)); - materialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.MATERIAL)); + setMaterial(materialChooser, preset, holder, Material.Type.BULK, ComponentPreset.MATERIAL); switch (t) { case BODY_TUBE: typeCombo.setSelectedItem(trans.get(BODY_TUBE_KEY)); @@ -1443,8 +1436,7 @@ public class PresetEditorDialog extends JDialog implements ItemListener { } break; case PARACHUTE: - materialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.SURFACE)); - materialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.MATERIAL)); + setMaterial(materialChooser, preset, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL); typeCombo.setSelectedItem(trans.get(PARACHUTE_KEY)); pcDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); if (preset.has(ComponentPreset.LINE_COUNT)) { @@ -1470,11 +1462,13 @@ public class PresetEditorDialog extends JDialog implements ItemListener { pcImage = new ImageIcon(byteArrayToImage(preset.get(ComponentPreset.IMAGE))); pcImageBtn.setIcon(pcImage); } - pcLineMaterialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.LINE_MATERIAL)); + setMaterial(pcLineMaterialChooser, preset, holder, Material.Type.LINE, ComponentPreset.LINE_MATERIAL); +// pcLineMaterialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.LINE)); + +// pcLineMaterialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.LINE_MATERIAL)); break; case STREAMER: - materialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.SURFACE)); - materialChooser.getModel().setSelectedItem(preset.get(ComponentPreset.MATERIAL)); + setMaterial(materialChooser, preset, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL); typeCombo.setSelectedItem(trans.get(STREAMER_KEY)); stDescTextField.setText(preset.get(ComponentPreset.DESCRIPTION)); if (preset.has(ComponentPreset.LENGTH)) { @@ -1503,6 +1497,20 @@ public class PresetEditorDialog extends JDialog implements ItemListener { } } + private void setMaterial(final JComboBox chooser, final ComponentPreset preset, final MaterialHolder holder, + final Material.Type theType, final TypedKey key) { + if (holder == null) { + chooser.setModel(new MaterialModel(PresetEditorDialog.this, theType)); + } + else { + chooser.setModel(new MaterialModel(PresetEditorDialog.this, theType, + holder.asDatabase(theType))); + } + if (preset != null) { + chooser.getModel().setSelectedItem(preset.get(key)); + } + } + /** * Extract the preset data from the UI fields, create a ComponentPreset instance, and notify the listener. */ @@ -2053,12 +2061,12 @@ public class PresetEditorDialog extends JDialog implements ItemListener { if (materialChooser != null && evt.getStateChange() == ItemEvent.SELECTED) { if (item.equals(trans.get(PARACHUTE_KEY)) || item.equals(trans.get(STREAMER_KEY))) { if (!((MaterialModel) materialChooser.getModel()).getType().equals(Material.Type.SURFACE)) { - materialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.SURFACE)); + setMaterial(materialChooser, null, holder, Material.Type.SURFACE, ComponentPreset.MATERIAL); } } else { if (!((MaterialModel) materialChooser.getModel()).getType().equals(Material.Type.BULK)) { - materialChooser.setModel(new MaterialModel(PresetEditorDialog.this, Material.Type.BULK)); + setMaterial(materialChooser, null, holder, Material.Type.BULK, ComponentPreset.MATERIAL); } } } @@ -2191,4 +2199,30 @@ public class PresetEditorDialog extends JDialog implements ItemListener { return true; } } + + class MaterialChooser extends JComboBox { + + public MaterialChooser() { + } + public MaterialChooser(MaterialModel model) { + super(model); + } + + /** + * Sets the data model that the JComboBox uses to obtain the list of items. + * + * @param aModel the ComboBoxModel that provides the displayed list of items + * + * @beaninfo bound: true description: Model that the combo box uses to get data to display. + */ + @Override + public void setModel(final ComboBoxModel aModel) { + if (getModel() instanceof MaterialModel) { + MaterialModel old = (MaterialModel) getModel(); + old.removeListener(); + } + super.setModel(aModel); + + } + } } diff --git a/core/src/net/sf/openrocket/gui/print/PrintableComponent.java b/core/src/net/sf/openrocket/gui/print/PrintableComponent.java index 384217a59..10e5c803e 100644 --- a/core/src/net/sf/openrocket/gui/print/PrintableComponent.java +++ b/core/src/net/sf/openrocket/gui/print/PrintableComponent.java @@ -3,7 +3,6 @@ */ package net.sf.openrocket.gui.print; -import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; @@ -14,7 +13,7 @@ import javax.swing.JPanel; /** * Common interface for components we want to print. Used by PageFitPrintStrategy - * + * * @author Jason Blood */ public class PrintableComponent extends JPanel implements Printable { @@ -24,7 +23,7 @@ public class PrintableComponent extends JPanel implements Printable { */ private int offsetX = 0; private int offsetY = 0; - + /** * Constructor. */ @@ -67,17 +66,17 @@ public class PrintableComponent extends JPanel implements Printable { PrintUtilities.enableDoubleBuffering(this); return Printable.PAGE_EXISTS; } - + /** * Set the offset this component will be printed to the page * @param x X offset to print at. - * @param x Y offset to print at. + * @param y Y offset to print at. */ public void setPrintOffset(int x, int y) { offsetX = x; offsetY = y; } - + /** * Get the X offset this component will be printed to the page * @return X offset to print at. @@ -85,7 +84,7 @@ public class PrintableComponent extends JPanel implements Printable { public int getOffsetX() { return offsetX; } - + /** * Get the Y offset this component will be printed to the page * @return Y offset to print at. diff --git a/core/src/net/sf/openrocket/preset/loader/MaterialHolder.java b/core/src/net/sf/openrocket/preset/loader/MaterialHolder.java index 7ac24592d..1e0f1ed21 100644 --- a/core/src/net/sf/openrocket/preset/loader/MaterialHolder.java +++ b/core/src/net/sf/openrocket/preset/loader/MaterialHolder.java @@ -5,17 +5,18 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import net.sf.openrocket.database.Database; import net.sf.openrocket.material.Material; import net.sf.openrocket.unit.UnitGroup; public class MaterialHolder { private final Map bulkMaterials = new HashMap(); - + private final Map surfaceMaterials = new HashMap(); - + private final Map lineMaterials = new HashMap(); - + public void put( Material material ) { switch ( material.getType() ) { case BULK: @@ -29,12 +30,12 @@ public class MaterialHolder { break; } } - + public Material.Bulk getBulkMaterial( Material.Bulk material ) { Material.Bulk m = bulkMaterials.get( material.getName() ); return (m==null) ? material : m; } - + public Material.Surface getSurfaceMaterial( Material.Surface material, Double thickness ) { Material.Surface m = surfaceMaterials.get(material.getName() ); if ( m != null ) { @@ -52,39 +53,55 @@ public class MaterialHolder { return m; } Material.Bulk bulk = bulkMaterials.get(material.getName() ); - + if ( bulk == null ) { return material; } - + // Ok, now we have a thickness and a bulk material of the correct name, // we can make our own surface material. - + Material.Surface surface = new Material.Surface( convertedMaterialName, bulk.getDensity() * thickness , true); - + this.put(surface); return surface; - + } - + public Material.Line getLineMaterial( Material.Line material ) { Material.Line m = lineMaterials.get( material.getName() ); return (m==null) ? material : m; } - + public int size() { return bulkMaterials.size() + surfaceMaterials.size() + lineMaterials.size(); } public Collection values() { - + HashSet allMats = new HashSet(); allMats.addAll( bulkMaterials.values() ); allMats.addAll( surfaceMaterials.values() ); allMats.addAll( lineMaterials.values() ); - + return allMats; - + } + + public Database asDatabase(Material.Type theType) { + Database result = new Database(); + switch (theType) { + case LINE: + result.addAll(lineMaterials.values()); + break; + case SURFACE: + result.addAll(surfaceMaterials.values()); + break; + case BULK: + default: + result.addAll(bulkMaterials.values()); + } + return result; + } }