view src/treecms/proto/edit/type2/EditableNodeAPI.java @ 11:bb802051dab3

added proxy based EditableNodeAPI
author shoshi
date Sat, 28 Aug 2010 20:39:41 +0900
parents
children
line wrap: on
line source

package treecms.proto.edit.type2;

import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

import treecms.proto.api.NodeAPI;

public class EditableNodeAPI implements NodeAPI
{
	private boolean m_flagChanged;
	
	private String m_class;
	private String m_title;
	
	private NodeAPI m_orig;
	
	private LinkedList<NodeAPI> m_children;
	
	public EditableNodeAPI(NodeAPI _orig)
	{
		m_orig = _orig;
		if(m_orig != null){
			m_flagChanged = false;
		}else{
			m_flagChanged = true;
		}
		
		m_children = new LinkedList<NodeAPI>();
		m_class = "";
		m_title = "";
	}
	
	void _resetFlag()
	{
		m_flagChanged = false;
	}
	
	public synchronized boolean setandgetChanged(boolean _flag) 
	{
		m_flagChanged = m_flagChanged | _flag;
		return m_flagChanged;
	}
	
	public void setOriginal(NodeAPI _orig)
	{
		m_orig = _orig;
	}
	
	public NodeAPI getOriginal()
	{
		return m_orig;
	}
	
	@Override
	public List<NodeAPI> getChildList()
	{
		// TODO Auto-generated method stub
		if(setandgetChanged(false)){
			return this.m_children;
		}
		return this.m_orig.getChildList();
	}

	@Override
	public boolean isChild(NodeAPI _child)
	{
		// TODO Auto-generated method stub
		if(setandgetChanged(false)){
			return m_children.contains(_child);
		}
		return m_orig.getChildList().contains(_child);
	}

	@Override
	public void addChild(NodeAPI _child) {
		// TODO Auto-generated method stub
		if(m_children.add(_child)){
			setandgetChanged(true);
		}
	}

	@Override
	public void removeChild(NodeAPI _child) {
		// TODO Auto-generated method stub
		if(m_children.remove(_child)){
			setandgetChanged(true);
		}
	}
	
	@Override
	public void up(NodeAPI _child) {
		// TODO Auto-generated method stub
		int curPos = m_children.indexOf(_child);
		if(curPos - 1 > 0){
			m_children.add(curPos - 1,m_children.remove(curPos));
			setandgetChanged(true);
		}
	}

	@Override
	public void down(NodeAPI _child) {
		// TODO Auto-generated method stub
		int curPos = m_children.indexOf(_child);
		if(curPos + 1 < m_children.size()){
			m_children.add(curPos + 1,m_children.remove(curPos));
			m_flagChanged = true;
		}
	}

	@Override
	public void setClassName(String _class) {
		// TODO Auto-generated method stub
		this.m_class = _class;
		setandgetChanged(true);
	}

	@Override
	public void setTitle(String _title) {
		// TODO Auto-generated method stub
		this.m_title = _title;
		setandgetChanged(true);
	}

	@Override
	public String getClassName() {
		// TODO Auto-generated method stub
		if(setandgetChanged(false)){
			return this.m_class;
		}
		return m_orig.getClassName();
	}

	@Override
	public String getTitle() {
		// TODO Auto-generated method stub
		if(setandgetChanged(false)){
			return this.m_title;
		}
		return m_orig.getClassName();
	}

	@Override
	public Iterator<NodeAPI> iterator() {
		// TODO Auto-generated method stub
		if(setandgetChanged(false)){
			return m_children.iterator();
		}
		return m_orig.iterator();
	}
}