001 /******************************************************************************
002 * Copyright (C) MActor Developers. All rights reserved. *
003 * ---------------------------------------------------------------------------*
004 * This file is part of MActor. *
005 * *
006 * MActor is free software; you can redistribute it and/or modify *
007 * it under the terms of the GNU General Public License as published by *
008 * the Free Software Foundation; either version 2 of the License, or *
009 * (at your option) any later version. *
010 * *
011 * MActor is distributed in the hope that it will be useful, *
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
014 * GNU General Public License for more details. *
015 * *
016 * You should have received a copy of the GNU General Public License *
017 * along with MActor; if not, write to the Free Software *
018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *
019 ******************************************************************************/
020 package org.mactor.ui.gui.project;
021
022 import java.util.ArrayList;
023 import java.util.List;
024
025 import org.mactor.framework.MactorException;
026
027 public abstract class ProjectTreeNode {
028 protected ProjectNodeType nodeType;
029 protected ArrayList<ProjectTreeNode> childNodes = new ArrayList<ProjectTreeNode>();
030 protected ProjectTreeNode parentNode;
031 protected Object modelObject;
032 protected ProjectTreeNode(ProjectNodeType nodeType) {
033 this.nodeType = nodeType;
034 }
035 public ProjectTreeNode(ProjectNodeType nodeType, Object modelObject) {
036 this.nodeType = nodeType;
037 this.modelObject = modelObject;
038 }
039 public String getName() {
040 if (modelObject == null)
041 return nodeType.name();
042 return model_getName();
043 }
044 public String getCaption() {
045 return getName();
046 }
047 public List<ProjectTreeNode> getChildNodes() {
048 return childNodes;
049 }
050 public Object getModelObject() {
051 return modelObject;
052 }
053 public ProjectNodeType getNodeType() {
054 return nodeType;
055 }
056 public ProjectTreeNode getParentNode() {
057 return parentNode;
058 }
059 public ProjectTreeNode getChildNode(int index) {
060 return childNodes.get(index);
061 }
062 public void detach() throws MactorException {
063 model_detatch();
064 }
065 public void removeChild(ProjectTreeNode child) throws MactorException {
066 int index = childNodes.indexOf(child);
067 childNodes.remove(child);
068 model_remove_child(index);
069 child.model_detatch();
070 model_save();
071 }
072 public void addChild(ProjectTreeNode newChild) throws MactorException {
073 newChild.setParentNode(this);
074 childNodes.add(0, newChild);
075 model_insert_child(0, newChild.getModelObject());
076 model_save();
077 }
078 public void addChildAfter(ProjectTreeNode node, ProjectTreeNode newChild) throws MactorException {
079 newChild.setParentNode(this);
080 int index = childNodes.indexOf(node);
081 childNodes.add(index + 1, newChild);
082 model_insert_child(index + 1, newChild.getModelObject());
083 model_save();
084 }
085 public boolean rename(String newName) throws MactorException {
086 if (model_rename(newName)) {
087 model_save();
088 return true;
089 }
090 return false;
091 }
092 public void save() throws MactorException {
093 model_save();
094 }
095 public int getIndexOfChild(ProjectTreeNode child) {
096 return childNodes.indexOf(child);
097 }
098 public int getChildCount() {
099 return childNodes.size();
100 }
101 private void setParentNode(ProjectTreeNode parentNode) {
102 this.parentNode = parentNode;
103 }
104 @Override
105 public String toString() {
106 return getCaption();
107 }
108 protected abstract ProjectTreeNode copy() throws MactorException;
109 protected abstract void model_remove_child(int index);
110 protected abstract void model_insert_child(int index, Object newChild);
111 protected abstract void model_delete() throws MactorException;
112 protected abstract void model_detatch() throws MactorException;
113 protected abstract boolean model_rename(String newName) throws MactorException;
114 protected abstract String model_getName();
115 protected abstract void model_save() throws MactorException;
116 }