/* * Freeplane - mind map editor * Copyright (C) 2008 Dimitry Polivaev * * This file author is Dimitry Polivaev * * This program 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 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 General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.freeplane.features.attribute; import org.freeplane.core.util.TypeReference; import org.freeplane.core.util.collection.SortedComboBoxModel; import org.freeplane.n3.nanoxml.XMLElement; /** * @author Dimitry Polivaev */ public class AttributeRegistryElement { private class RegisteredAttributeValues extends SortedComboBoxModel { /** * */ private static final long serialVersionUID = 1L; public void _add(final Object element) { super.add(element); } public void _remove(final Object element) { super.remove(element); } public void _replace(final Object oldO, final Object newO) { super.replace(oldO, newO); } @Override public void add(final Object element) { registry.getAttributeController().performRegistryAttributeValue(getKey(), element.toString(), true); } public String getKey() { return key; } @Override public void remove(final Object element) { registry.getAttributeController().performRemoveAttributeValue(getKey(), element.toString()); } @Override public void replace(final Object oldO, final Object newO) { registry.getAttributeController().performReplaceAttributeValue(getKey(), oldO.toString(), newO.toString()); } } private boolean isManual; private boolean isRestricted; private boolean isVisible; private String key; final private AttributeRegistry registry; private Boolean restrictionModel; final private RegisteredAttributeValues values; private Boolean visibilityModel; public AttributeRegistryElement(final AttributeRegistry registry, final String key) { super(); this.key = key; this.registry = registry; values = new RegisteredAttributeValues(); isVisible = false; visibilityModel = isVisible; isRestricted = false; isManual = false; restrictionModel = isRestricted; } public void addValue(final Object s) { values._add(s); registry.fireAttributesChanged(); } public Comparable<?> getKey() { return key; } Boolean getRestriction() { return restrictionModel; } public SortedComboBoxModel getValues() { return values; } Boolean getVisibilityModel() { return visibilityModel; } public boolean isManual() { return isManual; } public boolean isRestricted() { return isRestricted; } public boolean isVisible() { return isVisible; } public void removeAllValues() { values.clear(); registry.fireAttributesChanged(); } public void removeValue(final Object s) { values._remove(s); registry.fireAttributesChanged(); } public void replaceValue(final String oldValue, final String newValue) { values._replace(oldValue, newValue); registry.fireAttributesChanged(); } /** */ public XMLElement save() { final XMLElement element = new XMLElement(); if (isVisible()) { element.setAttribute("VISIBLE", "true"); } if (isManual()) { element.setAttribute("MANUAL", "true"); } if (isRestricted()) { element.setAttribute("RESTRICTED", "true"); } if (isManual() || isRestricted()) { for (int i = 0; i < values.getSize(); i++) { final XMLElement xmlValue = new XMLElement(); xmlValue.setName(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_VALUE); final Object value = values.getElementAt(i); final String string = value.toString(); xmlValue.setAttribute("VALUE", string); if(! (value instanceof String)){ final String spec = TypeReference.toSpec(value); xmlValue.setAttribute("OBJECT", spec); } element.addChild(xmlValue); } } element.setName(AttributeBuilder.XML_NODE_REGISTERED_ATTRIBUTE_NAME); element.setAttribute("NAME", key.toString()); return element; } public void setKey(final String key) { this.key = key; } public void setManual(final boolean isManual) { this.isManual = isManual; } public void setRestriction(final boolean isRestricted) { this.isRestricted = isRestricted; restrictionModel = isRestricted; registry.fireAttributesChanged(); } void setRestrictionModel(final Boolean restrictionModel) { this.restrictionModel = restrictionModel; } public void setVisibility(final boolean isVisible) { if (this.isVisible != isVisible) { this.isVisible = isVisible; visibilityModel = Boolean.valueOf(isVisible); if (isVisible) { registry.incrementVisibleElementsNumber(); } else { registry.decrementVisibleElementsNumber(); } registry.fireAttributeLayoutChanged(); } } void setVisibilityModel(final Boolean visibilityModel) { this.visibilityModel = visibilityModel; } }