Clover coverage report - Code Coverage for tapestry-contrib release 4.0.1
Coverage timestamp: Fri Mar 31 2006 09:15:40 EST
file stats: LOC: 619   Methods: 38
NCLOC: 459   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
TreeNodeView.java 0% 0% 0% 0%
coverage
 1    // Copyright 2004, 2005 The Apache Software Foundation
 2    //
 3    // Licensed under the Apache License, Version 2.0 (the "License");
 4    // you may not use this file except in compliance with the License.
 5    // You may obtain a copy of the License at
 6    //
 7    // http://www.apache.org/licenses/LICENSE-2.0
 8    //
 9    // Unless required by applicable law or agreed to in writing, software
 10    // distributed under the License is distributed on an "AS IS" BASIS,
 11    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 12    // See the License for the specific language governing permissions and
 13    // limitations under the License.
 14   
 15    package org.apache.tapestry.contrib.tree.components;
 16   
 17    import org.apache.commons.logging.Log;
 18    import org.apache.commons.logging.LogFactory;
 19    import org.apache.tapestry.BaseComponent;
 20    import org.apache.tapestry.IAsset;
 21    import org.apache.tapestry.IMarkupWriter;
 22    import org.apache.tapestry.IRender;
 23    import org.apache.tapestry.IRequestCycle;
 24    import org.apache.tapestry.contrib.tree.model.ITreeModelSource;
 25    import org.apache.tapestry.contrib.tree.model.ITreeRowSource;
 26    import org.apache.tapestry.contrib.tree.model.ITreeStateListener;
 27    import org.apache.tapestry.contrib.tree.model.ITreeStateModel;
 28    import org.apache.tapestry.contrib.tree.model.TreeRowObject;
 29    import org.apache.tapestry.contrib.tree.model.TreeStateEvent;
 30    import org.apache.tapestry.contrib.tree.simple.SimpleNodeRenderFactory;
 31    import org.apache.tapestry.engine.IPageLoader;
 32    import org.apache.tapestry.event.PageDetachListener;
 33    import org.apache.tapestry.event.PageEvent;
 34    import org.apache.tapestry.spec.ComponentSpecification;
 35    import org.apache.tapestry.util.ComponentAddress;
 36   
 37    /**
 38    * @author tsveltin?
 39    */
 40    public abstract class TreeNodeView extends BaseComponent implements PageDetachListener
 41    {
 42    private static final Log LOG = LogFactory.getLog(TreeNodeView.class);
 43   
 44    private Boolean m_objNodeState;
 45   
 46    private Boolean m_objShowNodeImages;
 47   
 48    private Boolean m_objMakeNodeDirect;
 49   
 50    private INodeRenderFactory m_objNodeRenderFactory;
 51   
 52    private IAsset m_objOpenNodeImage;
 53   
 54    private IAsset m_objCloseNodeImage;
 55   
 56    private int m_CurrentForeachConnectImageValue = TreeRowObject.LINE_CONN_IMG;
 57   
 58    public abstract INodeRenderFactory getNodeRenderFactoryParameter();
 59   
 60    public abstract Boolean getShowNodeImages();
 61   
 62  0 public TreeNodeView()
 63    {
 64  0 super();
 65  0 initialize();
 66    }
 67   
 68  0 private void initialize()
 69    {
 70  0 m_objNodeState = null;
 71  0 m_objShowNodeImages = null;
 72  0 m_objNodeRenderFactory = null;
 73  0 m_objMakeNodeDirect = null;
 74  0 m_CurrentForeachConnectImageValue = TreeRowObject.LINE_CONN_IMG;
 75    }
 76   
 77  0 public IRender getCurrentRenderer()
 78    {
 79  0 INodeRenderFactory objRenderFactory = getNodeRenderFactory();
 80  0 ITreeRowSource objTreeRowSource = getTreeRowSource();
 81  0 return objRenderFactory.getRender(
 82    objTreeRowSource.getTreeRow().getTreeNode(),
 83    getTreeModelSource(),
 84    getPage().getRequestCycle());
 85    }
 86   
 87  0 public Object[] getNodeContext()
 88    {
 89  0 ITreeModelSource objModelSource = getTreeModelSource();
 90  0 ComponentAddress objModelSourceAddress = new ComponentAddress(objModelSource);
 91  0 ITreeRowSource objTreeRowSource = getTreeRowSource();
 92  0 TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
 93  0 Object objValueUID = objTreeRowObject.getTreeNodeUID();
 94  0 if (LOG.isDebugEnabled())
 95    {
 96  0 LOG.debug("getNodeContext objValueUID = " + objValueUID);
 97    }
 98   
 99  0 return new Object[]
 100    { objValueUID, new Boolean(isNodeOpen()), objModelSourceAddress };
 101    }
 102   
 103    /**
 104    * Called when a node in the tree is clicked by the user. If the node is expanded, it will be
 105    * collapsed, and vice-versa, that is, the tree state model is retrieved, and it is told to
 106    * collapse or expand the node.
 107    *
 108    * @param cycle
 109    * The Tapestry request cycle object.
 110    */
 111  0 public void nodeExpandCollaps(IRequestCycle cycle)
 112    {
 113  0 Object context[] = cycle.getListenerParameters();
 114  0 Object objValueUID = null;
 115  0 if (context != null && context.length > 0)
 116    {
 117  0 objValueUID = context[0];
 118    }
 119  0 ComponentAddress objModelSourceAddress = (ComponentAddress) context[2];
 120  0 ITreeModelSource objTreeModelSource = (ITreeModelSource) objModelSourceAddress
 121    .findComponent(cycle);
 122    // ITreeModelSource objTreeModelSource = getTreeModelSource();
 123  0 ITreeStateModel objStateModel = objTreeModelSource.getTreeModel().getTreeStateModel();
 124  0 boolean bState = objStateModel.isUniqueKeyExpanded(objValueUID);
 125   
 126  0 if (bState)
 127    {
 128  0 objStateModel.collapse(objValueUID);
 129  0 fireNodeCollapsed(objValueUID, objTreeModelSource);
 130    }
 131    else
 132    {
 133  0 objStateModel.expandPath(objValueUID);
 134  0 fireNodeExpanded(objValueUID, objTreeModelSource);
 135    }
 136    }
 137   
 138    /**
 139    * Called when a node in the tree is selected by the user. the tree state model is retrieved,
 140    * and it is told to select the node.
 141    *
 142    * @param cycle
 143    * The Tapestry request cycle object.
 144    */
 145  0 public void nodeSelect(IRequestCycle cycle)
 146    {
 147  0 Object context[] = cycle.getListenerParameters();
 148  0 Object objValueUID = null;
 149  0 if (context != null && context.length > 0)
 150    {
 151  0 objValueUID = context[0];
 152    }
 153  0 ComponentAddress objModelSourceAddress = (ComponentAddress) context[2];
 154  0 ITreeModelSource objTreeModelSource = (ITreeModelSource) objModelSourceAddress
 155    .findComponent(cycle);
 156    // ITreeModelSource objTreeModelSource = getTreeModelSource();
 157  0 ITreeStateModel objStateModel = objTreeModelSource.getTreeModel().getTreeStateModel();
 158  0 Object objSelectedNodeInState = objStateModel.getSelectedNode();
 159   
 160  0 if (objValueUID.equals(objSelectedNodeInState))
 161    {
 162    // do nothing, the selected node in UI is the same as the selected in
 163    // state model. The user should use refresh of back button.
 164  0 return;
 165    }
 166   
 167  0 objStateModel.setSelectedNode(objValueUID);
 168  0 fireNodeSelected(objValueUID, objTreeModelSource);
 169    }
 170   
 171  0 private void fireNodeSelected(Object objValueUID, ITreeModelSource objTreeModelSource)
 172    {
 173  0 deliverEvent(TreeStateEvent.SELECTED_NODE_CHANGED, objValueUID, objTreeModelSource);
 174    }
 175   
 176  0 private void fireNodeCollapsed(Object objValueUID, ITreeModelSource objTreeModelSource)
 177    {
 178  0 deliverEvent(TreeStateEvent.NODE_COLLAPSED, objValueUID, objTreeModelSource);
 179    }
 180   
 181  0 private void fireNodeExpanded(Object objValueUID, ITreeModelSource objTreeModelSource)
 182    {
 183  0 deliverEvent(TreeStateEvent.NODE_EXPANDED, objValueUID, objTreeModelSource);
 184    }
 185   
 186  0 private void deliverEvent(int nEventUID, Object objValueUID, ITreeModelSource objTreeModelSource)
 187    {
 188  0 ITreeStateListener objListener = objTreeModelSource.getTreeStateListener();
 189  0 if (objListener != null)
 190    {
 191  0 TreeStateEvent objEvent = new TreeStateEvent(nEventUID, objValueUID, objTreeModelSource
 192    .getTreeModel().getTreeStateModel());
 193  0 objListener.treeStateChanged(objEvent);
 194    }
 195   
 196    }
 197   
 198  0 public void pageDetached(PageEvent arg0)
 199    {
 200  0 initialize();
 201    }
 202   
 203  0 public void finishLoad(IRequestCycle objCycle, IPageLoader arg0, ComponentSpecification arg1)
 204    {
 205  0 super.finishLoad(objCycle, arg0, arg1);
 206  0 getPage().addPageDetachListener(this);
 207   
 208  0 m_objOpenNodeImage = getAsset("_openNodeImage");
 209  0 m_objCloseNodeImage = getAsset("_closeNodeImage");
 210    }
 211   
 212  0 public boolean isNodeOpen()
 213    {
 214  0 if (m_objNodeState == null)
 215    {
 216  0 ITreeRowSource objTreeRowSource = getTreeRowSource();
 217  0 TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
 218  0 Object objValueUID = objTreeRowObject.getTreeNodeUID();
 219  0 ITreeModelSource objTreeModelSource = getTreeModelSource();
 220  0 ITreeStateModel objStateModel = objTreeModelSource.getTreeModel().getTreeStateModel();
 221  0 boolean bState = objStateModel.isUniqueKeyExpanded(objValueUID);
 222  0 m_objNodeState = new Boolean(bState);
 223    }
 224  0 return m_objNodeState.booleanValue();
 225    }
 226   
 227    /**
 228    * Returns the openNodeImage.
 229    *
 230    * @return IAsset
 231    */
 232  0 public IAsset getNodeImage()
 233    {
 234  0 IAsset objResult = null;
 235  0 ITreeRowSource objRowSource = getTreeRowSource();
 236  0 boolean bLeaf = objRowSource.getTreeRow().getLeaf();
 237  0 int nRowType = objRowSource.getTreeRow().getTreeRowPossiotionType();
 238  0 if (!bLeaf)
 239    {
 240  0 if (isNodeOpen())
 241    {
 242  0 switch (nRowType)
 243    {
 244  0 case TreeRowObject.FIRST_LAST_ROW:
 245    {
 246  0 objResult = getAsset("_topLastOpenNodeImage");
 247  0 break;
 248    }
 249   
 250  0 case TreeRowObject.FIRST_ROW:
 251    {
 252  0 objResult = getAsset("_topOpenNodeImage");
 253  0 break;
 254    }
 255   
 256  0 case TreeRowObject.MIDDLE_ROW:
 257    {
 258  0 objResult = getAsset("_middleOpenNodeImage");
 259  0 break;
 260    }
 261   
 262  0 case TreeRowObject.LAST_ROW:
 263    {
 264  0 objResult = getAsset("_bottomOpenNodeImage");
 265  0 break;
 266    }
 267   
 268  0 default:
 269    {
 270  0 objResult = getAsset("_openNodeImage");
 271  0 break;
 272    }
 273    }
 274    }
 275    else
 276    {
 277  0 switch (nRowType)
 278    {
 279  0 case TreeRowObject.FIRST_LAST_ROW:
 280    {
 281  0 objResult = getAsset("_topLastCloseNodeImage");
 282  0 break;
 283    }
 284   
 285  0 case TreeRowObject.FIRST_ROW:
 286    {
 287  0 objResult = getAsset("_topCloseNodeImage");
 288  0 break;
 289    }
 290   
 291  0 case TreeRowObject.MIDDLE_ROW:
 292    {
 293  0 objResult = getAsset("_middleCloseNodeImage");
 294  0 break;
 295    }
 296   
 297  0 case TreeRowObject.LAST_ROW:
 298    {
 299  0 objResult = getAsset("_bottomCloseNodeImage");
 300  0 break;
 301    }
 302   
 303  0 default:
 304    {
 305  0 objResult = getAsset("_closeNodeImage");
 306  0 break;
 307    }
 308    }
 309    }
 310    }
 311    else
 312    {
 313  0 switch (nRowType)
 314    {
 315  0 case TreeRowObject.FIRST_LAST_ROW:
 316    {
 317  0 objResult = getAsset("_topLineImage");
 318  0 break;
 319    }
 320   
 321  0 case TreeRowObject.FIRST_ROW:
 322    {
 323  0 objResult = getAsset("_topLineImage");
 324  0 break;
 325    }
 326   
 327  0 case TreeRowObject.MIDDLE_ROW:
 328    {
 329  0 objResult = getAsset("_middleCrossLineImage");
 330  0 break;
 331    }
 332   
 333  0 case TreeRowObject.LAST_ROW:
 334    {
 335  0 objResult = getAsset("_bottomLineImage");
 336  0 break;
 337    }
 338   
 339  0 default:
 340    {
 341  0 objResult = getAsset("_bottomLineImage");
 342  0 break;
 343    }
 344    }
 345   
 346    }
 347  0 return objResult;
 348    }
 349   
 350  0 public IAsset getNodeImageOld()
 351    {
 352  0 if (isNodeOpen())
 353    {
 354  0 if (m_objOpenNodeImage == null)
 355    {
 356  0 m_objOpenNodeImage = getAsset("_openNodeImage");
 357    }
 358  0 return m_objOpenNodeImage;
 359    }
 360   
 361  0 if (m_objCloseNodeImage == null)
 362    {
 363  0 m_objCloseNodeImage = getAsset("_closeNodeImage");
 364    }
 365  0 return m_objCloseNodeImage;
 366    }
 367   
 368    /**
 369    * Returns the closeNodeImage.
 370    *
 371    * @return IAsset
 372    */
 373  0 public IAsset getCloseNodeImage()
 374    {
 375  0 return m_objCloseNodeImage;
 376    }
 377   
 378    /**
 379    * Returns the openNodeImage.
 380    *
 381    * @return IAsset
 382    */
 383  0 public IAsset getOpenNodeImage()
 384    {
 385  0 return m_objOpenNodeImage;
 386    }
 387   
 388    /**
 389    * Sets the closeNodeImage.
 390    *
 391    * @param closeNodeImage
 392    * The closeNodeImage to set
 393    */
 394  0 public void setCloseNodeImage(IAsset closeNodeImage)
 395    {
 396  0 m_objCloseNodeImage = closeNodeImage;
 397    }
 398   
 399    /**
 400    * Sets the openNodeImage.
 401    *
 402    * @param openNodeImage
 403    * The openNodeImage to set
 404    */
 405  0 public void setOpenNodeImage(IAsset openNodeImage)
 406    {
 407  0 m_objOpenNodeImage = openNodeImage;
 408    }
 409   
 410    /**
 411    * @see org.apache.tapestry.AbstractComponent#renderComponent(IMarkupWriter, IRequestCycle)
 412    */
 413  0 protected void renderComponent(IMarkupWriter arg0, IRequestCycle arg1)
 414    {
 415  0 super.renderComponent(arg0, arg1);
 416  0 m_objNodeState = null;
 417    }
 418   
 419    /**
 420    * Returns the ShowNodeImages.
 421    *
 422    * @return Boolean
 423    */
 424  0 public Boolean isShowNodeImages()
 425    {
 426  0 if (m_objShowNodeImages == null)
 427    {
 428  0 if (isParameterBound("nodeRenderFactory"))
 429    {
 430  0 m_objShowNodeImages = getShowNodeImages();
 431    }
 432    else
 433    {
 434  0 m_objShowNodeImages = Boolean.TRUE;
 435    }
 436   
 437    }
 438  0 return m_objShowNodeImages;
 439    }
 440   
 441  0 public boolean getShowImages()
 442    {
 443  0 boolean bResult = isShowNodeImages().booleanValue();
 444  0 return bResult;
 445    }
 446   
 447  0 public boolean getShowWithoutImages()
 448    {
 449  0 boolean bResult = !isShowNodeImages().booleanValue();
 450  0 return bResult;
 451    }
 452   
 453  0 public String getOffsetStyle()
 454    {
 455    // return "width: " + getTreeDataView().getTreeDeep() * 15;
 456  0 ITreeRowSource objTreeRowSource = getTreeRowSource();
 457  0 TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
 458  0 int nTreeRowDepth = 0;
 459  0 if (objTreeRowObject != null)
 460    {
 461  0 nTreeRowDepth = objTreeRowObject.getTreeRowDepth();
 462  0 if (nTreeRowDepth != 0)
 463  0 nTreeRowDepth = nTreeRowDepth - 1;
 464    }
 465  0 return "padding-left: " + nTreeRowDepth * 19 + "px";
 466    }
 467   
 468  0 public INodeRenderFactory getNodeRenderFactory()
 469    {
 470  0 if (m_objNodeRenderFactory == null)
 471    {
 472  0 if (isParameterBound("nodeRenderFactory"))
 473  0 m_objNodeRenderFactory = getNodeRenderFactoryParameter();
 474    else
 475  0 m_objNodeRenderFactory = new SimpleNodeRenderFactory();
 476    }
 477  0 return m_objNodeRenderFactory;
 478    }
 479   
 480    public abstract boolean getMakeNodeDirect();
 481   
 482  0 public boolean getMakeNodeNoDirect()
 483    {
 484  0 return !getMakeNodeDirect();
 485    }
 486   
 487  0 public String getCleanSelectedID()
 488    {
 489  0 return getSelectedNodeID();
 490    }
 491   
 492  0 public String getSelectedID()
 493    {
 494  0 ITreeRowSource objTreeRowSource = getTreeRowSource();
 495  0 ITreeModelSource objTreeModelSource = getTreeModelSource();
 496  0 TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
 497  0 Object objNodeValueUID = objTreeRowObject.getTreeNodeUID();
 498  0 Object objSelectedNode = objTreeModelSource.getTreeModel().getTreeStateModel()
 499    .getSelectedNode();
 500  0 if (objNodeValueUID.equals(objSelectedNode))
 501    {
 502  0 return getSelectedNodeID();
 503    }
 504  0 return "";
 505    }
 506   
 507  0 private String getSelectedNodeID()
 508    {
 509    // return getTreeDataView().getTreeView().getSelectedNodeID();
 510  0 return "tree";
 511    }
 512   
 513  0 public String getNodeStyleClass()
 514    {
 515  0 ITreeRowSource objTreeRowSource = getTreeRowSource();
 516  0 ITreeModelSource objTreeModelSource = getTreeModelSource();
 517  0 TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
 518  0 boolean bResult = false;
 519  0 if (objTreeRowObject != null)
 520    {
 521  0 Object objNodeValueUID = objTreeRowObject.getTreeNodeUID();
 522  0 Object objSelectedNode = objTreeModelSource.getTreeModel().getTreeStateModel()
 523    .getSelectedNode();
 524  0 bResult = objNodeValueUID.equals(objSelectedNode);
 525    }
 526  0 if (bResult)
 527    {
 528  0 return "selectedNodeViewClass";
 529    }
 530   
 531  0 return "notSelectedNodeViewClass";
 532    }
 533   
 534  0 public ITreeRowSource getTreeRowSource()
 535    {
 536  0 ITreeRowSource objSource = (ITreeRowSource) getPage().getRequestCycle().getAttribute(
 537    ITreeRowSource.TREE_ROW_SOURCE_ATTRIBUTE);
 538  0 return objSource;
 539    }
 540   
 541  0 public ITreeModelSource getTreeModelSource()
 542    {
 543  0 ITreeModelSource objSource = (ITreeModelSource) getPage().getRequestCycle().getAttribute(
 544    ITreeModelSource.TREE_MODEL_SOURCE_ATTRIBUTE);
 545  0 return objSource;
 546    }
 547   
 548  0 public boolean getShowConnectImage()
 549    {
 550  0 ITreeRowSource objRowSource = getTreeRowSource();
 551  0 int nRowType = objRowSource.getTreeRow().getTreeRowPossiotionType();
 552  0 if (TreeRowObject.MIDDLE_ROW == nRowType)
 553  0 return true;
 554  0 return false;
 555    }
 556   
 557  0 public int[] getForeachConnectImageList()
 558    {
 559  0 ITreeRowSource objTreeRowSource = getTreeRowSource();
 560  0 TreeRowObject objTreeRowObject = objTreeRowSource.getTreeRow();
 561  0 return objTreeRowObject.getLineConnImages();
 562    }
 563   
 564  0 public boolean getDisableLink()
 565    {
 566  0 ITreeRowSource objRowSource = getTreeRowSource();
 567  0 boolean bLeaf = objRowSource.getTreeRow().getLeaf();
 568  0 return bLeaf;
 569    }
 570   
 571    /**
 572    * Returns the openNodeImage.
 573    *
 574    * @return IAsset nevalidno neshto
 575    */
 576  0 public IAsset getConnectImage()
 577    {
 578  0 IAsset objResult = null;
 579  0 int nConnectImageType = getCurrentForeachConnectImageValue();
 580  0 switch (nConnectImageType)
 581    {
 582  0 case TreeRowObject.EMPTY_CONN_IMG:
 583    {
 584  0 objResult = getAsset("_whiteSpaceImage");
 585  0 break;
 586    }
 587   
 588  0 case TreeRowObject.LINE_CONN_IMG:
 589    {
 590  0 objResult = getAsset("_middleLineImage");
 591  0 break;
 592    }
 593   
 594  0 default:
 595    {
 596  0 objResult = getAsset("_whiteSpaceImage");
 597  0 break;
 598    }
 599    }
 600  0 return objResult;
 601    }
 602   
 603    /**
 604    * @return Returns the m_CurrentForeachConnectImageValue.
 605    */
 606  0 public int getCurrentForeachConnectImageValue()
 607    {
 608  0 return m_CurrentForeachConnectImageValue;
 609    }
 610   
 611    /**
 612    * @param currentForeachConnectImageValue
 613    * The m_CurrentForeachConnectImageValue to set.
 614    */
 615  0 public void setCurrentForeachConnectImageValue(int currentForeachConnectImageValue)
 616    {
 617  0 m_CurrentForeachConnectImageValue = currentForeachConnectImageValue;
 618    }
 619    }