/***************************************************************************** * This file is part of Rinzo * * Author: Claudio Cancinos WWW: https://sourceforge.net/projects/editorxml Copyright (C): 2008, Claudio Cancinos * * This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General * Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any * later version. * * This program 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 Lesser General Public License along with this program; If not, see * <http://www.gnu.org/licenses/> ****************************************************************************/ package com.amalto.workbench.widgets.xmlviewer.model.tags.nodef; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import com.amalto.workbench.widgets.xmlviewer.model.XMLNode; import com.amalto.workbench.widgets.xmlviewer.model.tags.TagTypeDefinition; import com.amalto.workbench.widgets.xmlviewer.model.tags.XMLTagDefinitionProvider; import com.amalto.workbench.widgets.xmlviewer.utils.XMLViewUtils; /** * Defines for each tag which other tags and attributes could contain based on * the already written tags */ public class NoDefTagDefinitionProvider implements XMLTagDefinitionProvider { private Map<String, Collection<String>> tagsContainersMapping = new HashMap<String, Collection<String>>(); private Map<String, Collection<String>> tagsAttributeMapping = new HashMap<String, Collection<String>>(); private Map<String, TagTypeDefinition> tags = new HashMap<String, TagTypeDefinition>(); public TagTypeDefinition getTagDefinition(XMLNode node) { String tagName = node.getTagName(); TagTypeDefinition tag = this.tags.get(tagName); if (tag == null) { tag = new NoDefTagTypeDefinition(tagName, this.tags, this.tagsContainersMapping, this.tagsAttributeMapping); this.tags.put(tagName, tag); } return tag; } public void addReference(String tagContainer, String tagContained) { if (!XMLViewUtils.isEmpty(tagContainer)) { this.getInnerTagsIn(tagContainer).add(tagContained); } } private Collection<String> getInnerTagsIn(String tagName) { if (tagName == null || tagName.length() == 0) { tagName = "ROOT"; } Collection<String> innerTags = this.tagsContainersMapping.get(tagName); if (innerTags == null) { innerTags = new HashSet<String>(); this.tagsContainersMapping.put(tagName, innerTags); } return innerTags; } private Collection<String> getAttibutes(String tagName) { Collection<String> attributes = this.tagsAttributeMapping.get(tagName); if (attributes == null) { attributes = new HashSet<String>(); this.tagsAttributeMapping.put(tagName, attributes); } return attributes; } public void addAllAttributes(String tagName, Collection<String> attributes) { this.getAttibutes(tagName).addAll(attributes); } public void clear() { this.tagsAttributeMapping = new HashMap<String, Collection<String>>(); this.tagsContainersMapping = new HashMap<String, Collection<String>>(); } }