KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > openlaszlo > iv > flash > context > GraphContext


1 /*
2  * $Id: GraphContext.java,v 1.2 2002/02/15 23:44:28 skavish Exp $
3  *
4  * ==========================================================================
5  *
6  * The JGenerator Software License, Version 1.0
7  *
8  * Copyright (c) 2000 Dmitry Skavish (skavish@usa.net). All rights reserved.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions are met:
12  *
13  * 1. Redistributions of source code must retain the above copyright
14  * notice, this list of conditions and the following disclaimer.
15  *
16  * 2. Redistributions in binary form must reproduce the above copyright
17  * notice, this list of conditions and the following disclaimer in
18  * the documentation and/or other materials provided with the
19  * distribution.
20  *
21  * 3. The end-user documentation included with the redistribution, if
22  * any, must include the following acknowlegement:
23  * "This product includes software developed by Dmitry Skavish
24  * (skavish@usa.net, http://www.flashgap.com/)."
25  * Alternately, this acknowlegement may appear in the software itself,
26  * if and wherever such third-party acknowlegements normally appear.
27  *
28  * 4. The name "The JGenerator" must not be used to endorse or promote
29  * products derived from this software without prior written permission.
30  * For written permission, please contact skavish@usa.net.
31  *
32  * 5. Products derived from this software may not be called "The JGenerator"
33  * nor may "The JGenerator" appear in their names without prior written
34  * permission of Dmitry Skavish.
35  *
36  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39  * DISCLAIMED. IN NO EVENT SHALL DMITRY SKAVISH OR THE OTHER
40  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47  * SUCH DAMAGE.
48  *
49  */

50
51 package org.openlaszlo.iv.flash.context;
52
53 import java.util.*;
54
55 /**
56  * Abstract generator context which supports path expressions.
57  *
58  * PathContexts allow for expressions which can evaluate expressions to lists
59  * of contexts, not just Strings.
60  *
61  * @author James Taylor
62  */

63
64 public abstract class GraphContext extends Context
65 {
66     public abstract List getValueList( String JavaDoc path );
67
68     public abstract String JavaDoc getValue( String JavaDoc path );
69
70     protected List getValueListFromParent( String JavaDoc path )
71     {
72         Context parent = getParent();
73
74         // Find closest parent which is a GraphContext and call its
75
// getValueList method.
76

77         while ( parent != null )
78         {
79
80             if ( parent instanceof GraphContext )
81             {
82                 return ( ( GraphContext ) parent ).getValueList( path );
83             }
84             else
85             {
86                 parent = parent.getParent();
87             }
88         }
89
90         // If no parent is a GraphContext, return an empty list.
91

92         return null;
93     }
94
95    /**
96      * Sort given List of contexts using given path 'sortby' as a key
97      *
98      * @param list List to sort
99      * @param sortby Path expression to sort on
100      * @param ascending if true then sort in ascending order, otherwise in descending
101      * @return sorted copy of list
102      */

103
104     public static List sortValueList( List list,
105                                       final String JavaDoc sortby,
106                                       final boolean ascending )
107     {
108         // create list to sort into
109

110         ArrayList newList = new ArrayList( list );
111
112         // sort
113

114         Collections.sort( newList, new java.util.Comparator JavaDoc()
115             {
116                 public int compare( Object JavaDoc o1, Object JavaDoc o2 )
117                 {
118                     String JavaDoc val1 = ( ( GraphContext ) o1 ).getValue( sortby );
119                     String JavaDoc val2 = ( ( GraphContext ) o2 ).getValue( sortby );
120
121                     if( ascending )
122                     {
123                         return val1.compareTo( val2 );
124                     }
125                     else
126                     {
127                         return val2.compareTo( val1 );
128                     }
129                 }
130             }
131         );
132
133         return newList;
134     }
135
136 }
137
Popular Tags