1 package com.sri.emo.dbobj.model_tree; 2 3 import com.jcorporate.expresso.core.controller.Transition; 4 5 import java.io.Serializable; 6 import java.util.ArrayList; 7 import java.util.Collections; 8 import java.util.List; 9 10 /*** 11 * Represents a particular node on the model tree. Also implements the 12 * <tt>Composite Pattern</tt> since it contains multiple types all nested 13 * in a tree structure. 14 * 15 * @author Michael Rimov 16 */ 17 public interface ModelNode { 18 19 /*** 20 * <tt>Special Case</tt> for when there are no children for a particular 21 * node in the model. 22 */ 23 static final List NO_CHILDREN = Collections.unmodifiableList(new ArrayList(0)); 24 25 /*** 26 * <tt>Special Case</tt> for when there is no parent node for a particular 27 * model. Since there is only one instance, the equality reference 28 * operator (==) can be used instead of equals() to check for parent. 29 */ 30 static final ModelNode NO_PARENT = new NoParentNode(); 31 32 /*** 33 * <tt>Special Case</tt> for when there is no link to view or edit the 34 * node. 35 */ 36 static final Transition NO_LINK = new Transition(); 37 38 /*** 39 * Retrieve the items in the composite model. 40 * 41 * @return a list of ModelComposite objects or NO_CHILDREN if this is 42 * a leaf node. 43 */ 44 List getChildren(); 45 46 /*** 47 * Retrieves the parent or returns NO_PARENT if we are already at the 48 * top of the node. 49 * 50 * @return ModelCompositeNode or NO_PARENT. 51 */ 52 ModelNode getParent(); 53 54 /*** 55 * Retrieve the viewable interface of what we are dealing with. 56 * 57 * @return ModelVisitable 58 */ 59 ModelVisitable getVisitable(); 60 61 /*** 62 * Retrieve the label assigned to the node. 63 * 64 * @return String label. 65 */ 66 String getLabel(); 67 68 /*** 69 * Retrieve the link to get to the node for editing. (Similar to IViewable) 70 * 71 * @return Transition. 72 */ 73 Transition getLink(); 74 75 /*** 76 * Contains status about the node itself -- are all parts and subparts 77 * completely filled? 78 * 79 * @return ModelFillStatus -- enumeration type 80 */ 81 ModelFillStatus getModelFillStatus(); 82 83 84 /*** 85 * Returns a node completion status which represents whether the 86 * factory was able to build a non-recursive complete model for the given 87 * node in question or 88 * 89 * @return NodeCompletionStatus 90 */ 91 NodeCompletionStatus getNodeCompletionStatus(); 92 93 /*** 94 * This is a method to allow 'tagging' particular nodes with application 95 * specific information and processing the node differently based on that 96 * information. The default hierarchy has no specifics of what kind 97 * of information may be stored there other than it be serializable 98 * for maximum flexibility in the future. 99 * 100 * @return Serializable 101 */ 102 Serializable getAdditionalInfo(); 103 104 /*** 105 * Sets the additional tag information to be associated with this node. 106 * 107 * @param newInfo the new application-specific information. 108 */ 109 void setAdditionalInfo(Serializable newInfo); 110 111 112 }