/* * Copyright 2005-2015 by BerryWorks Software, LLC. All rights reserved. * * This file is part of EDIReader. You may obtain a license for its use directly from * BerryWorks Software, and you may also choose to use this software under the terms of the * GPL version 3. Other products in the EDIReader software suite are available only by licensing * with BerryWorks. Only those files bearing the GPL statement below are available under the GPL. * * EDIReader is free software: you can redistribute it and/or modify it under the terms of the * GNU General Public License as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * EDIReader is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with EDIReader. If not, * see <http://www.gnu.org/licenses/>. */ package com.berryworks.edireader.plugin; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * A runtime data structure that optimizes the LoopDescriptors of a plugin * for access by an EDI parser. * * @see com.berryworks.edireader.Plugin */ public class PluginPreparation { protected final Map<String, List<LoopDescriptor>> segmentMap = new HashMap<>(); /** * Constructs an instance given an array of LoopDescriptors. * <p> * The LoopDescriptors typically are taken directly from the EDIPlugin for a given type of document. * * @param loops - array of LoopDescriptors */ public PluginPreparation(LoopDescriptor[] loops) { if (loops == null) return; for (LoopDescriptor loop : loops) { String segmentName = loop.getFirstSegment(); List<LoopDescriptor> descriptorList = segmentMap.get(segmentName); if (descriptorList == null) { descriptorList = new ArrayList<>(); segmentMap.put(segmentName, descriptorList); } descriptorList.add(loop); } } /** * Returns an ordered list of LoopDescriptors corresponding to loops that start with a * given segment name. * <p> * The LoopDescriptors appear in the same order as they were mentioned in the plugin. * * @param segment - name of the segment of interest * @return List of LoopDescriptors */ public List<LoopDescriptor> getList(String segment) { return segmentMap.get(segment); } }