blob: b9262260e4a7ee008f21f4a86cea91307dba2076 [file] [log] [blame]
// Copyright 2004 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.tapestry.contrib.tree.components;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tapestry.BaseComponent;
import org.apache.tapestry.IBinding;
import org.apache.tapestry.IMarkupWriter;
import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.contrib.tree.model.ISessionStoreManager;
import org.apache.tapestry.contrib.tree.model.ITreeModel;
import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
import org.apache.tapestry.contrib.tree.model.ITreeSessionStateManager;
import org.apache.tapestry.contrib.tree.model.ITreeStateListener;
import org.apache.tapestry.contrib.tree.simple.FullTreeSessionStateManager;
import org.apache.tapestry.event.PageDetachListener;
import org.apache.tapestry.event.PageEvent;
import org.apache.tapestry.event.PageRenderListener;
import org.apache.tapestry.util.ComponentAddress;
/**
* @version $Id$
*/
public class TreeView extends BaseComponent
implements PageDetachListener, PageRenderListener, ITreeModelSource {
private static final Log LOG = LogFactory.getLog(TreeView.class);
private IBinding m_objSessionStoreManagerBinding;
private IBinding m_objTreeModelBinding;
private IBinding m_objSessionStateManagerBinding;
private ITreeModel m_objTreeModel;
private ITreeSessionStateManager m_objTreeSessionStateManager;
private ISessionStoreManager m_objSessionStoreManager;
private Object m_objTreeSessionState;
private ComponentAddress m_objComponentAddress;
public TreeView(){
super();
initialize();
}
private void initialize(){
m_objTreeModel = null;
m_objTreeSessionStateManager = null;
m_objSessionStoreManager = null;
m_objTreeSessionState = null;
m_objComponentAddress = null;
}
/**
* @see org.apache.tapestry.AbstractComponent#finishLoad()
*/
protected void finishLoad() {
super.finishLoad();
getPage().addPageRenderListener(this);
getPage().addPageDetachListener(this);
}
/**
* @see org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
*/
/* protected void renderComponent(IMarkupWriter writer, IRequestCycle cycle)
throws RequestCycleException
{
renderWrapped(writer, cycle);
}
*/
/**
* @see org.apache.tapestry.event.PageDetachListener#pageDetached(PageEvent)
*/
public void pageDetached(PageEvent arg0) {
initialize();
}
/**
* @see org.apache.tapestry.event.PageRenderListener#pageBeginRender(PageEvent)
*/
public void pageBeginRender(PageEvent arg0) {
if(arg0.getRequestCycle().isRewinding()) {
return;
}
storeSesion();
}
/**
* @see org.apache.tapestry.event.PageRenderListener#pageEndRender(PageEvent)
*/
public void pageEndRender(PageEvent arg0) {
}
/**
* Returns the treeModelBinding.
* @return IBinding
*/
public IBinding getTreeModelBinding() {
return m_objTreeModelBinding;
}
/**
* Sets the treeModelBinding.
* @param treeModelBinding The treeModelBinding to set
*/
public void setTreeModelBinding(IBinding treeModelBinding) {
m_objTreeModelBinding = treeModelBinding;
}
/**
* Returns the SessionStoreManagerBinding.
* @return IBinding
*/
public IBinding getSessionStoreManagerBinding() {
return m_objSessionStoreManagerBinding;
}
/**
* Returns the sessionStateManagerBinding.
* @return IBinding
*/
public IBinding getSessionStateManagerBinding() {
return m_objSessionStateManagerBinding;
}
/**
* Sets the SessionStoreManagerBinding.
* @param sessionStoreManagerBinding The SessionStoreManagerBinding to set
*/
public void setSessionStoreManagerBinding(IBinding
sessionStoreManagerBinding) {
m_objSessionStoreManagerBinding = sessionStoreManagerBinding;
}
/**
* Sets the sessionStateManagerBinding.
* @param sessionStateManagerBinding The sessionStateManagerBinding to set
*/
public void setSessionStateManagerBinding(IBinding
sessionStateManagerBinding) {
m_objSessionStateManagerBinding = sessionStateManagerBinding;
}
private void extractTreeModel(){
if (LOG.isDebugEnabled()) {
LOG.debug("TreeView.extractTreeModel()");
}
ISessionStoreManager objHolder = getSessionStoreManager();
ITreeSessionStateManager objSessionManager = getTreeSessionStateMgr();
Object objSessionState;
if (objHolder == null) {
objSessionState = getTreeSessionState();
} else {
objSessionState = objHolder.getSessionState(this.getPage(),
"treeSessionState");
}
if (objSessionState != null) {
m_objTreeModel = objSessionManager.getModel(objSessionState);
} else {
if (LOG.isDebugEnabled()) {
LOG.debug("TreeView.extractTreeModel() from BINDING");
}
m_objTreeModel = (ITreeModel)getTreeModelBinding().getObject();
}
}
private void storeSesion(){
if (LOG.isDebugEnabled()) {
LOG.debug("TreeView.storeSesion()");
}
ITreeSessionStateManager objSessionManager = getTreeSessionStateMgr();
Object objSessionState =
objSessionManager.getSessionState(getTreeModel());
store(objSessionState);
}
private void store(Object objSessionState){
ISessionStoreManager objHolder = getSessionStoreManager();
if (objHolder == null) {
fireObservedChange("treeSessionState", objSessionState);
} else {
//String strPath = "treeSessionState";
String strPath = getExtendedId();
if (LOG.isDebugEnabled())
LOG.debug("store(): setting state with: " + strPath);
objHolder.setSessionState(this.getPage(), strPath,
objSessionState);
}
}
/**
* @see ITreeComponent#resetState()
*/
public void resetState() {
if (LOG.isDebugEnabled()) {
LOG.debug("TreeView.resetState()");
}
initialize();
store(null);
}
/**
* Returns the SessionStoreManager.
* @return ISessionStoreManager
*/
public ISessionStoreManager getSessionStoreManager() {
if (m_objSessionStoreManager == null
&& getSessionStoreManagerBinding() != null) {
m_objSessionStoreManager =
(ISessionStoreManager)getSessionStoreManagerBinding().getObject();
}
return m_objSessionStoreManager;
}
/**
* Returns the wizardSessionStateMgr.
* @return IWizardSessionStateManager
*/
public ITreeSessionStateManager getTreeSessionStateMgr() {
if (m_objTreeSessionStateManager == null) {
IBinding objBinding = getSessionStateManagerBinding();
if(objBinding != null){
Object objManager = objBinding.getObject();
m_objTreeSessionStateManager =
(ITreeSessionStateManager) objManager;
} else {
m_objTreeSessionStateManager =
new FullTreeSessionStateManager();
}
}
return m_objTreeSessionStateManager;
}
public ComponentAddress getComponentPath() {
if (m_objComponentAddress == null) {
m_objComponentAddress = new ComponentAddress(this);
}
return m_objComponentAddress;
}
/**
* Returns the treeModel.
* @return ITreeModel
*/
public ITreeModel getTreeModel() {
if (m_objTreeModel == null) {
extractTreeModel();
}
return m_objTreeModel;
}
/**
* Sets the treeModel.
* @param treeModel The treeModel to set
*/
public void setTreeModel(ITreeModel treeModel) {
m_objTreeModel = treeModel;
}
/**
* Returns the treeSessionState.
* @return Object
*/
public Object getTreeSessionState() {
return m_objTreeSessionState;
}
/**
* Sets the treeSessionState.
* @param treeSessionState The treeSessionState to set
*/
public void setTreeSessionState(Object treeSessionState) {
m_objTreeSessionState = treeSessionState;
}
public String getSelectedNodeStyleID(){
return getId() + ":selected";
}
/**
* @see org.apache.tapestry.BaseComponent#renderComponent(org.apache.tapestry.IMarkupWriter, org.apache.tapestry.IRequestCycle)
*/
protected void renderComponent(IMarkupWriter arg0, IRequestCycle arg1) {
Object objExistedTreeModelSource = arg1.getAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE);
arg1.setAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE, this);
super.renderComponent(arg0, arg1);
arg1.setAttribute(ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE, objExistedTreeModelSource);
}
/**
* @see org.apache.tapestry.contrib.tree.model.ITreeModelSource#getTreeStateListener()
*/
public ITreeStateListener getTreeStateListener() {
ITreeStateListener objListener = null;
IBinding objBinding = getBinding("treeStateListener");
if(objBinding != null){
objListener = (ITreeStateListener) objBinding.getObject();
}
return objListener;
}
}