Skip to content

Commit

Permalink
Added "new entity" scaffolding screen.
Browse files Browse the repository at this point in the history
  • Loading branch information
nmihajlovski committed Feb 4, 2015
1 parent ce2b415 commit ad1efdf
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 13 deletions.
15 changes: 15 additions & 0 deletions rapidoid-app/src/main/java/org/rapidoid/app/AppPageGeneric.java
Expand Up @@ -61,6 +61,8 @@ public class AppPageGeneric extends AppGUI {


protected static final Pattern ENTITY_EDIT = Pattern.compile("^/edit(\\w+?)/(\\d+)/?$"); protected static final Pattern ENTITY_EDIT = Pattern.compile("^/edit(\\w+?)/(\\d+)/?$");


protected static final Pattern ENTITY_NEW = Pattern.compile("^/new(\\w+?)/?$");

protected static final Pattern ENTITY_LIST = Pattern.compile("^/(\\w+?)/?$"); protected static final Pattern ENTITY_LIST = Pattern.compile("^/(\\w+?)/?$");


protected static final AppScreens APP_SCREENS = Cls.customizable(AppScreens.class); protected static final AppScreens APP_SCREENS = Cls.customizable(AppScreens.class);
Expand Down Expand Up @@ -181,6 +183,19 @@ protected Object genericScreen() {
} }
} }


m = ENTITY_NEW.matcher(path);

if (m.find()) {
String type = m.group(1);

Class<?> entityType = DB.schema().getEntityType(type);
if (entityType == null || !Metadata.isAnnotated(entityType, Scaffold.class)) {
return null;
}

return new NewEntityScreenGeneric(entityType);
}

m = ENTITY_VIEW.matcher(path); m = ENTITY_VIEW.matcher(path);


if (m.find()) { if (m.find()) {
Expand Down
Expand Up @@ -51,23 +51,13 @@ public Object content() {
GridWidget grid = grid(entityType, "-id", 10); GridWidget grid = grid(entityType, "-id", 10);


boolean canAdd = Secure.canInsert(Secure.username(), DB.entity(entityType)); boolean canAdd = Secure.canInsert(Secure.username(), DB.entity(entityType));
canAdd = false; // FIXME solve programmatic processing before save e.g. set owner ButtonTag btnAdd = canAdd ? btnPrimary("Add " + entityName).cmd("Add") : null;
ButtonTag btnAdd = canAdd ? btn("Add " + entityName).cmd("Add") : null;


return row(caption, grid, btnAdd); return row(caption, grid, btnAdd);
} }


public void onAdd() { public void onAdd() {
showModal("addRecord"); throw ctx().redirect("/new" + Cls.entityName(entityType).toLowerCase());
}

public Tag addRecord() {
newEntity = DB.entity(entityType);
return modal("Add New " + Cls.entityName(entityType), create(newEntity), div(SAVE, CANCEL));
}

public void onSave() {
DB.insert(newEntity);
} }


} }
@@ -0,0 +1,58 @@
package org.rapidoid.app;

/*
* #%L
* rapidoid-app
* %%
* Copyright (C) 2014 - 2015 Nikolche Mihajlovski
* %%
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* #L%
*/

import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Session;
import org.rapidoid.annotation.Since;
import org.rapidoid.db.DB;
import org.rapidoid.html.Tag;
import org.rapidoid.util.U;
import org.rapidoid.widget.FormWidget;

@Authors("Nikolche Mihajlovski")
@Since("2.1.0")
public class NewEntityScreenGeneric extends Screen {

private final Class<?> entityType;

@Session
private Object target;

public NewEntityScreenGeneric(Class<?> entityType) {
this.entityType = entityType;
}

public Object content() {
target = DB.entity(entityType);

Tag caption = h2("New " + U.capitalized(ctx().pathSegment(0).substring(3)));
FormWidget form = edit(target).buttons(SAVE, CANCEL);

return mid6(caption, form);
}

public void onSave() {
DB.insert(target);
ctx().goBack(1);
}

}
Expand Up @@ -54,7 +54,7 @@ public Object content() {


public void onEdit() { public void onEdit() {
String id = ctx().pathSegment(1); String id = ctx().pathSegment(1);
ctx().redirect("/edit" + Cls.entityName(target) + "/" + id); ctx().redirect("/edit" + Cls.entityName(target).toLowerCase() + "/" + id);
} }


public void onDelete() { public void onDelete() {
Expand Down

0 comments on commit ad1efdf

Please sign in to comment.