Skip to content

Commit 60c8499

Browse files
committed
edit
1 parent 9aff924 commit 60c8499

File tree

4 files changed

+48
-21
lines changed

4 files changed

+48
-21
lines changed

src/main/java/org/usf/jquery/web/RequestEntryChain.java

Lines changed: 36 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -158,32 +158,57 @@ public ViewJoin[] evalJoin(ViewDecorator vd) {
158158
.orElseThrow(()-> noSuchResourceException(VIEW, value));
159159
e = requireNoArgs().next; //check args only if view exists
160160
}
161-
var join = vd.joiner(e.value);
161+
var join = vd.join(e.value);
162162
if(nonNull(join)) {
163163
e.requireNoArgs().requireNoNext(); //check args & next only if joiner exists
164-
return requireNonNull(join.build(), "view.joiner: " + e);
164+
return requireNonNull(join.build(), vd.identity() + ".join: " + e);
165165
}
166-
throw noSuchResourceException(vd.identity() + ".joiner", e.value);
166+
throw noSuchResourceException(vd.identity() + ".join", e.value);
167167
}
168168

169169
//[partition.order]*
170-
public Partition evalPartition(ViewDecorator td) {
170+
public Partition evalPartition(ViewDecorator vd) {
171+
var e = this;
172+
if(hasNext()) {
173+
var res = currentContext().lookupRegisteredView(value);
174+
if(res.isPresent()) {
175+
vd = res.get();
176+
e = requireNoArgs().next; //check args only if view exists
177+
}
178+
}
179+
var par = vd.partition(e.value);
180+
if(nonNull(par)) {
181+
e.requireNoArgs().requireNoNext();
182+
return requireNonNull(par.build(), vd.identity() + ".partition: " + e);
183+
}
184+
if(e == this) { // not view
185+
var res = evalPartition2(vd);
186+
if(res.isPresent()) {
187+
return res.get();
188+
}
189+
}
190+
throw noSuchResourceException(vd.identity() + ".partition", e.value);
191+
}
192+
193+
private Optional<Partition> evalPartition2(ViewDecorator vd) {
171194
List<DBColumn> cols = new ArrayList<>();
172195
List<DBOrder> ords = new ArrayList<>();
173196
var e = this;
174197
do {
175198
switch (e.value) {
176-
case PARTITION: addAll(cols, columnVarargs(td)); break;
177-
case ORDER: addAll(ords, e.oderVarargs(td)); break;
178-
default: throw e==this
179-
? cannotParseEntryException(PARTITION, e) //first entry
180-
: badEntrySyntaxException(joinArray("|", PARTITION, ORDER), e.value);
199+
case PARTITION: addAll(cols, columnVarargs(vd)); break;
200+
case ORDER: addAll(ords, e.oderVarargs(vd)); break;
201+
default:
202+
if(e == this) {
203+
return empty(); //cannotParseEntryException(PARTITION, e) //first entry
204+
}
205+
throw badEntrySyntaxException(joinArray("|", PARTITION, ORDER), e.value);
181206
}
182207
e = e.next;
183208
} while(nonNull(e));
184-
return new Partition(
209+
return Optional.of(new Partition(
185210
cols.toArray(DBColumn[]::new),
186-
ords.toArray(DBOrder[]::new));
211+
ords.toArray(DBOrder[]::new)));
187212
}
188213

189214
//[view.]column[.operator]*

src/main/java/org/usf/jquery/web/ViewDecorator.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public interface ViewDecorator {
4747

4848
String identity(); //URL
4949

50-
String columnName(ColumnDecorator cd);
50+
String columnName(ColumnDecorator cd);
5151

5252
default ViewBuilder builder() {
5353
return this::buildView;
@@ -57,10 +57,14 @@ default CriteriaBuilder<DBFilter> criteria(String name) { //!aggregation
5757
return null; //no criteria by default
5858
}
5959

60-
default JoinBuilder joiner(String name) {
61-
return null; //no builder by default
60+
default JoinBuilder join(String name) {
61+
return null; //no join by default
6262
}
63-
63+
64+
default PartitionBuilder partition(String name) {
65+
return null; //no partition by default
66+
}
67+
6468
default DBView view() {
6569
return metadata().getView();
6670
}
@@ -90,9 +94,8 @@ private TableView buildView() {
9094
}
9195

9296
default ViewMetadata metadata() {
93-
var view = requireNonNull(builder(), identity() + ".builder").build();
9497
return currentContext().computeTableMetadata(this, cols->
95-
new ViewMetadata(view, declaredColumns(this, cols)));
98+
new ViewMetadata(requireNonNull(builder(), identity() + ".builder").build(), declaredColumns(this, cols)));
9699
}
97100

98101
static Map<String, ColumnMetadata> declaredColumns(ViewDecorator vd, Collection<ColumnDecorator> cols){

src/main/java/org/usf/jquery/web/ViewDecoratorWrapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public CriteriaBuilder<DBFilter> criteria(String name) {
3737
}
3838

3939
@Override
40-
public JoinBuilder joiner(String name) {
41-
return view.joiner(name);
40+
public JoinBuilder join(String name) {
41+
return view.join(name);
4242
}
4343
}

src/main/java/org/usf/jquery/web/YearViewDecorator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.usf.jquery.web;
22

3-
import static java.lang.String.join;
43
import static java.time.Month.DECEMBER;
54
import static java.time.YearMonth.now;
65
import static java.util.Objects.nonNull;
@@ -74,7 +73,7 @@ default void parseFilters(RequestQueryBuilder query, Map<String, String[]> param
7473
default YearMonth[] parseRevisions(Map<String, String[]> parameterMap) {
7574
var arr = parameterMap.remove(REVISION_MODE);
7675
if(nonNull(arr) && arr.length > 1) {
77-
throw new IllegalArgumentException("too many " + REVISION_MODE + " " + join(", ", arr)); //multiple values
76+
throw new IllegalArgumentException("too many " + REVISION_MODE + " " + String.join(", ", arr)); //multiple values
7877
}
7978
var mod = revisionMode(isEmpty(arr) || isBlank(arr[0]) ? defaultRevisionMode() : arr[0]);
8079
var values = parameterMap.containsKey(REVISION)

0 commit comments

Comments
 (0)