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