/** * Copyright (c) 2011, SOCIETIES Consortium (WATERFORD INSTITUTE OF TECHNOLOGY (TSSG), HERIOT-WATT UNIVERSITY (HWU), SOLUTA.NET * (SN), GERMAN AEROSPACE CENTRE (Deutsches Zentrum fuer Luft- und Raumfahrt e.V.) (DLR), Zavod za varnostne tehnologije * informacijske družbe in elektronsko poslovanje (SETCCE), INSTITUTE OF COMMUNICATION AND COMPUTER SYSTEMS (ICCS), LAKE * COMMUNICATIONS (LAKE), INTEL PERFORMANCE LEARNING SOLUTIONS LTD (INTEL), PORTUGAL TELECOM INOVAÇÃO, SA (PTIN), IBM Corp., * INSTITUT TELECOM (ITSUD), AMITEC DIACHYTI EFYIA PLIROFORIKI KAI EPIKINONIES ETERIA PERIORISMENIS EFTHINIS (AMITEC), TELECOM * ITALIA S.p.a.(TI), TRIALOG (TRIALOG), Stiftelsen SINTEF (SINTEF), NEC EUROPE LTD (NEC)) * All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following * conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT * SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package org.societies.personalisation.preference.api.model; import java.io.Serializable; import java.util.Enumeration; import javax.swing.tree.MutableTreeNode; /** * Interface that represents a preference object. This is used in the Preference * Manager * @see MutableTreeNode * @author Elizabeth * @version 1.0 * @created 08-Nov-2011 14:02:56 */ public interface IPreference extends MutableTreeNode, Serializable { /** * Method to return the condition included in this node * @return the condition object if this node is a branch, null otherwise */ public IPreferenceCondition getCondition(); /** * Method to return the outcome included in this node * @return the outcome object if this node is a leaf, null otherwise */ public IPreferenceOutcome getOutcome(); /** * Method that checks if this preference has an outcome or a condition object included * @return true if it has an outcome, false if it has a condition */ public boolean isLeaf(); /** * Method that checks if this preference has an outcome or a condition object included * * @return true if it has a condition, false if it has an outcome */ public boolean isBranch(); /** * Method that returns an array of Objects that can be a {@link IPreferenceCondition} objects or {@link IPreferenceOutcome} objects * from the root of the tree to this node * @see DefaultMutableTreeNode#getUserObjectPath() * @return an array of objects that can be IPreferenceCondition objects or IPreferenceOutcome objects */ public Object[] getUserObjectPath(); /** * Returns the object included in this node. It can be a {@link IPreferenceCondition} or a {@link IPreferenceOutcome} * @return the object included in this node */ public Object getUserObject(); /** * Method to add a child preference node to this node * @param p the preference node to add to this node * */ public void add(IPreference p); /** * Method to remove a preference node child from this node * @param p the preference node to remove from this node */ public void remove(IPreference p); /** * @see DefaultMutableTreeNode#depthFirstEnumeration() * @return an enumeration of IPreference node objects traversed in depth-first order */ public Enumeration<IPreference> depthFirstEnumeration(); /** * @see DefaultMutableTreeNode#breadthFirstEnumeration() * @return an enumeration of IPreference node objects traversed in breadth-first order */ public Enumeration<IPreference> breadthFirstEnumeration(); /** * Method to return the root node of this Preference tree. @see DefaultMutableTreeNode#getRoot() * @return the IPreference root node object */ public IPreference getRoot(); /** * Method to return the distance from the IPreference root node to this node. * @see DefaultMutableTreeNode#getLevel() * @return If this node is the root, returns 0. */ public int getLevel(); /** * Method to return the depth of the tree rooted at this node -- the longest distance from this node to a leaf. * @see DefaultMutableTreeNode#getDepth() * @return If this node has no children, returns 0. */ public int getDepth(); /** * @see DefaultMutableTreeNode#preorderEnumeration() * @return an enumeration of IPreference node objects traversed in pre-order */ public Enumeration<IPreference> preorderEnumeration(); /** * @see DefaultMutableTreeNode#postorderEnumeration() * @return an enumeration of IPreference node objects traversed in post-order */ public Enumeration<IPreference> postorderEnumeration(); /** * Method used for printing the tree rooted at this node * @return a string representation of the Tree rooted at this node (preorder enumeration) */ public String toTreeString(); }