@@ -8,15 +8,22 @@ class ClassesController < ApplicationController
88 ont , submission = get_ontology_and_submission
99 cls_count = submission . class_count ( LOGGER )
1010 error 403 , "Unable to display classes due to missing metrics for #{ submission . id . to_s } . Please contact the administrator." if cls_count < 0
11+
12+ attributes , page , size , order_by_hash , bring_unmapped_needed = settings_params ( LinkedData ::Models ::Class )
1113 check_last_modified_segment ( LinkedData ::Models ::Class , [ ont . acronym ] )
12- page , size = page_params
13- ld = LinkedData ::Models ::Class . goo_attrs_to_load ( includes_param )
14- unmapped = ld . delete ( :properties )
15- page_data = LinkedData ::Models ::Class . in ( submission ) . include ( ld ) . page ( page , size ) . page_count_set ( cls_count ) . all
1614
17- if unmapped && page_data . length > 0
18- LinkedData ::Models ::Class . in ( submission ) . models ( page_data ) . include ( :unmapped ) . all
15+ index = LinkedData ::Models ::Class . in ( submission )
16+ if order_by_hash
17+ index = index . order_by ( order_by_hash )
18+ cls_count = nil
19+ # Add index here when, indexing fixed
20+ # index_name = 'classes_sort_by_date'
21+ # index = index.index_as(index_name)
22+ # index = index.with_index(index_name)
1923 end
24+
25+ page_data = index
26+ page_data = page_data . include ( attributes ) . page ( page , size ) . page_count_set ( cls_count ) . all
2027 reply page_data
2128 end
2229
@@ -28,7 +35,8 @@ class ClassesController < ApplicationController
2835 load_attrs = LinkedData ::Models ::Class . goo_attrs_to_load ( includes_param )
2936 unmapped = load_attrs . delete ( :properties )
3037 page , size = page_params
31- roots = submission . roots ( load_attrs , page , size )
38+
39+ roots = submission . roots ( load_attrs , page , size , concept_schemes : concept_schemes , concept_collections : concept_collections )
3240
3341 if unmapped && roots . length > 0
3442 LinkedData ::Models ::Class . in ( submission ) . models ( roots ) . include ( :unmapped ) . all
@@ -44,13 +52,16 @@ class ClassesController < ApplicationController
4452 check_last_modified_segment ( LinkedData ::Models ::Class , [ ont . acronym ] )
4553 load_attrs = LinkedData ::Models ::Class . goo_attrs_to_load ( includes_param )
4654 unmapped = load_attrs . delete ( :properties )
47- sort = params [ "sort" ] . eql? ( 'true' ) || params [ "sort" ] . eql? ( '1' ) # default = false
48- roots = nil
55+ load_attrs += LinkedData ::Models ::Class . concept_is_in_attributes if submission . skos?
56+
57+ request_display ( load_attrs . join ( ',' ) )
58+
59+ sort = params [ "sort" ] . eql? ( 'true' ) || params [ "sort" ] . eql? ( '1' ) # default = false
4960
5061 if sort
51- roots = submission . roots_sorted ( load_attrs )
62+ roots = submission . roots_sorted ( load_attrs , concept_schemes : concept_schemes , concept_collections : concept_collections )
5263 else
53- roots = submission . roots ( load_attrs )
64+ roots = submission . roots ( load_attrs , concept_schemes : concept_schemes , concept_collections : concept_collections )
5465 end
5566
5667 if unmapped && roots . length > 0
@@ -66,25 +77,28 @@ class ClassesController < ApplicationController
6677 ld = LinkedData ::Models ::Class . goo_attrs_to_load ( includes_param )
6778
6879 load_children = ld . delete :children
69- if ! load_children
80+ unless load_children
7081 load_children = ld . select { |x | x . instance_of? ( Hash ) && x . include? ( :children ) }
7182 if load_children
7283 ld = ld . select { |x | !( x . instance_of? ( Hash ) && x . include? ( :children ) ) }
7384 end
7485 end
7586
7687 unmapped = ld . delete ( :properties ) ||
77- ( includes_param && includes_param . include? ( :all ) )
88+ ( includes_param && includes_param . include? ( :all ) )
89+
90+ ld << :memberOf if includes_param . include? ( :all )
91+
7892 cls = get_class ( submission , ld )
7993 if unmapped
8094 LinkedData ::Models ::Class . in ( submission )
81- . models ( [ cls ] ) . include ( :unmapped ) . all
95+ . models ( [ cls ] ) . include ( :unmapped ) . all
8296 end
8397 if includes_param . include? ( :hasChildren )
8498 cls . load_has_children
8599 end
86- if !load_children . nil? and load_children . length >0
87- LinkedData ::Models ::Class . partially_load_children ( [ cls ] , 500 , cls . submission )
100+ if !load_children . nil? and load_children . length > 0
101+ LinkedData ::Models ::Class . partially_load_children ( [ cls ] , 500 , cls . submission )
88102 if includes_param . include? ( :hasChildren )
89103 cls . children . each do |c |
90104 c . load_has_children
@@ -104,35 +118,27 @@ class ClassesController < ApplicationController
104118 reply cls . paths_to_root
105119 end
106120
107- # Get a tree view
121+ # Get a tree view (returns the tree from the roots classes to the specified class)
108122 get '/:cls/tree' do
109123 params ||= @params
110124 includes_param_check
111- sort = params [ "sort" ] . eql? ( 'true' ) || params [ "sort" ] . eql? ( '1' ) # default = false
125+ sort = params [ "sort" ] . eql? ( 'true' ) || params [ "sort" ] . eql? ( '1' ) # default = false
112126 # We override include values other than the following, user-provided include ignored
113- display_attrs = "prefLabel,hasChildren,children,obsolete,subClassOf"
114- params [ "display" ] = display_attrs
115- params [ "serialize_nested" ] = true # Override safety check and cause children to serialize
116-
117- # Make sure Rack gets updated
118- req = Rack ::Request . new ( env )
119- req . update_param ( "display" , display_attrs )
120- req . update_param ( "serialize_nested" , true )
121-
122127 ont , submission = get_ontology_and_submission
123128 check_last_modified_segment ( LinkedData ::Models ::Class , [ ont . acronym ] )
124129 cls = get_class ( submission )
125- root_tree = nil
126- roots = nil
127-
130+ display_attrs = [ :prefLabel , :hasChildren , :children , :obsolete , :subClassOf ]
131+ display_attrs += LinkedData ::Models ::Class . concept_is_in_attributes if submission . skos?
132+ request_display ( display_attrs . join ( ',' ) )
133+ extra_include = [ :hasChildren , :isInActiveScheme , :isInActiveCollection ]
128134 if sort
129- root_tree = cls . tree_sorted
130- #add the other roots to the response
131- roots = submission . roots_sorted ( extra_include = [ :hasChildren ] )
135+ roots = submission . roots_sorted ( extra_include , concept_schemes : concept_schemes , concept_collections : concept_collections )
136+ root_tree = cls . tree_sorted ( concept_schemes : concept_schemes , concept_collections : concept_collections , roots : roots )
137+ # add the other roots to the response
132138 else
133- root_tree = cls . tree
134- #add the other roots to the response
135- roots = submission . roots ( extra_include = [ :hasChildren ] )
139+ roots = submission . roots ( extra_include , concept_schemes : concept_schemes , concept_collections : concept_collections )
140+ root_tree = cls . tree ( concept_schemes : concept_schemes , concept_collections : concept_collections , roots : roots )
141+ # add the other roots to the response
136142 end
137143
138144 # if this path' root does not get returned by the submission.roots call, manually add it
@@ -143,7 +149,7 @@ class ClassesController < ApplicationController
143149 if r . id == root_tree . id
144150 roots [ i ] = root_tree
145151 else
146- roots [ i ] . instance_variable_set ( "@children" , [ ] )
152+ roots [ i ] . instance_variable_set ( "@children" , [ ] )
147153 roots [ i ] . loaded_attributes << :children
148154 end
149155 end
@@ -159,7 +165,7 @@ class ClassesController < ApplicationController
159165 error 404 if cls . nil?
160166 ancestors = cls . ancestors
161167 LinkedData ::Models ::Class . in ( submission ) . models ( ancestors )
162- . include ( :prefLabel , :synonym , :definition ) . all
168+ . include ( :prefLabel , :synonym , :definition ) . all
163169 reply ancestors
164170 end
165171
@@ -169,13 +175,13 @@ class ClassesController < ApplicationController
169175 ont , submission = get_ontology_and_submission
170176 check_last_modified_segment ( LinkedData ::Models ::Class , [ ont . acronym ] )
171177 page , size = page_params
172- cls = get_class ( submission , load_attrs = [ ] )
178+ cls = get_class ( submission , load_attrs = [ ] )
173179 error 404 if cls . nil?
174180 ld = LinkedData ::Models ::Class . goo_attrs_to_load ( includes_param )
175181 unmapped = ld . delete ( :properties )
176- page_data = cls . retrieve_descendants ( page , size )
182+ page_data = cls . retrieve_descendants ( page , size )
177183 LinkedData ::Models ::Class . in ( submission ) . models ( page_data )
178- . include ( :prefLabel , :synonym , :definition ) . all
184+ . include ( :prefLabel , :synonym , :definition ) . all
179185 if unmapped
180186 LinkedData ::Models ::Class . in ( submission ) . models ( page_data ) . include ( :unmapped ) . all
181187 end
@@ -192,20 +198,12 @@ class ClassesController < ApplicationController
192198 cls = get_class ( submission )
193199 error 404 if cls . nil?
194200 ld = LinkedData ::Models ::Class . goo_attrs_to_load ( includes_param )
195- unmapped = ld . delete ( :properties )
196- aggregates = LinkedData ::Models ::Class . goo_aggregates_to_load ( ld )
197- page_data_query = LinkedData ::Models ::Class . where ( parents : cls ) . in ( submission ) . include ( ld )
198- page_data_query . aggregate ( *aggregates ) unless aggregates . empty?
199- page_data = page_data_query . page ( page , size ) . all
200- if unmapped
201- LinkedData ::Models ::Class . in ( submission ) . models ( page_data ) . include ( :unmapped ) . all
202- end
203- page_data . delete_if { |x | x . id . to_s == cls . id . to_s }
204- if ld . include? ( :hasChildren )
205- page_data . each do |c |
206- c . load_has_children
207- end
208- end
201+ ld += LinkedData ::Models ::Class . concept_is_in_attributes if submission . skos?
202+ request_display ( ld . join ( ',' ) )
203+
204+ page_data = submission . children ( cls , includes_param : includes_param , concept_schemes : concept_schemes ,
205+ concept_collections : concept_collections , page : page , size : size )
206+
209207 reply page_data
210208 end
211209
@@ -236,6 +234,7 @@ class ClassesController < ApplicationController
236234 end
237235
238236 private
237+
239238 def includes_param_check
240239 if includes_param
241240 if includes_param . include? ( :all )
@@ -248,5 +247,15 @@ def includes_param_check
248247 end
249248 end
250249
250+ def request_display ( attrs )
251+
252+ params [ "display" ] = attrs
253+ params [ "serialize_nested" ] = true # Override safety check and cause children to serialize
254+
255+ # Make sure Rack gets updated
256+ req = Rack ::Request . new ( env )
257+ req . update_param ( "display" , attrs )
258+ req . update_param ( "serialize_nested" , true )
259+ end
251260 end
252261end
0 commit comments