Ver código fonte

add support for data actions

tags/v0.4.0
Jonathan Cobb 5 anos atrás
pai
commit
365a17f879
8 arquivos alterados com 48 adições e 11 exclusões
  1. +5
    -0
      bubble-server/src/main/java/bubble/dao/app/AppDataDAO.java
  2. +6
    -0
      bubble-server/src/main/java/bubble/model/app/AppDataDriver.java
  3. +13
    -4
      bubble-server/src/main/java/bubble/resources/app/AppDataResource.java
  4. +1
    -1
      bubble-server/src/main/java/bubble/resources/app/AppSiteDataResource.java
  5. +19
    -3
      bubble-server/src/main/java/bubble/resources/app/DataResourceBase.java
  6. +1
    -0
      bubble-server/src/main/resources/message_templates/en_US/server/post_auth/ResourceMessages.properties
  7. +2
    -2
      bubble-server/src/main/resources/models/apps/user_block/bubbleApp_userBlock.json
  8. +1
    -1
      bubble-web

+ 5
- 0
bubble-server/src/main/java/bubble/dao/app/AppDataDAO.java Ver arquivo

@@ -4,6 +4,7 @@ import bubble.model.account.Account;
import bubble.model.app.AppData;
import bubble.model.app.BubbleApp;
import lombok.extern.slf4j.Slf4j;
import org.cobbzilla.util.collection.SingletonList;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.springframework.beans.factory.annotation.Autowired;
@@ -77,6 +78,10 @@ public class AppDataDAO extends AppTemplateEntityDAO<AppData> {
}

public List<AppData> findByExample(Account account, AppData basis, String key) {
// try by uuid first
final AppData byUuid = findByAccountAndId(account.getUuid(), key);
if (byUuid != null) return new SingletonList<>(byUuid);

final List<Criterion> crits = new ArrayList<>();
if (account != null) crits.add(eq("account", account.getUuid()));
if (basis.hasApp()) crits.add(eq("app", basis.getApp()));


+ 6
- 0
bubble-server/src/main/java/bubble/model/app/AppDataDriver.java Ver arquivo

@@ -5,8 +5,14 @@ import bubble.model.device.Device;
import org.cobbzilla.wizard.dao.SearchResults;
import org.cobbzilla.wizard.model.search.SearchQuery;

import static org.cobbzilla.wizard.resources.ResourceUtil.invalidEx;

public interface AppDataDriver {

SearchResults query(Account caller, Device device, BubbleApp app, AppSite site, AppDataView view, SearchQuery query);

default void takeAction(String id, String action) {
throw invalidEx("err.data.action.notSupported", "Action is not supported", action);
}

}

+ 13
- 4
bubble-server/src/main/java/bubble/resources/app/AppDataResource.java Ver arquivo

@@ -3,24 +3,33 @@ package bubble.resources.app;
import bubble.model.account.Account;
import bubble.model.app.AppData;
import bubble.model.app.BubbleApp;
import org.cobbzilla.util.collection.SingletonList;
import org.glassfish.jersey.server.ContainerRequest;

import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;

import java.util.List;

import static org.cobbzilla.wizard.resources.ResourceUtil.*;
import static org.cobbzilla.wizard.resources.ResourceUtil.forbidden;
import static org.cobbzilla.wizard.resources.ResourceUtil.ok;

public class AppDataResource extends DataResourceBase {

public AppDataResource(Account account, BubbleApp app) {
super(account, new AppData().setAccount(account.getUuid()).setApp(app.getUuid()));
super(account, app, new AppData().setAccount(account.getUuid()).setApp(app.getUuid()));
}

public Response delete(@Context ContainerRequest ctx, String key) {
final Account caller = checkEditable(ctx);
final List<AppData> found = getDao().findByAccountAndAppAndAndKey(getAccountUuid(ctx), basis.getApp(), key);
// try by id first
final String accountUuid = getAccountUuid(ctx);
final AppData byUuid = getDao().findByAccountAndId(accountUuid, key);
final List<AppData> found;
if (byUuid != null) {
found = new SingletonList<>(byUuid);
} else {
found = getDao().findByAccountAndAppAndAndKey(accountUuid, basis.getApp(), key);
}
for (AppData d : found) {
if (!canDelete(ctx, caller, d)) return forbidden();
}


+ 1
- 1
bubble-server/src/main/java/bubble/resources/app/AppSiteDataResource.java Ver arquivo

@@ -8,7 +8,7 @@ import bubble.model.app.BubbleApp;
public class AppSiteDataResource extends DataResourceBase {

public AppSiteDataResource(Account account, BubbleApp app, AppSite site) {
super(account, new AppData()
super(account, app, new AppData()
.setApp(app.getUuid())
.setSite(site.getUuid())
.setAccount(account == null ? null : account.getUuid()));


+ 19
- 3
bubble-server/src/main/java/bubble/resources/app/DataResourceBase.java Ver arquivo

@@ -22,8 +22,7 @@ import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import java.util.List;

import static bubble.ApiConstants.EP_DISABLE;
import static bubble.ApiConstants.EP_ENABLE;
import static bubble.ApiConstants.*;
import static org.cobbzilla.util.reflect.ReflectionUtil.copy;
import static org.cobbzilla.wizard.resources.ResourceUtil.*;

@@ -41,10 +40,12 @@ public abstract class DataResourceBase extends AccountOwnedTemplateResource<AppD
@Autowired protected AppMatcherDAO matcherDAO;
@Autowired protected AppSiteDAO siteDAO;

protected BubbleApp app;
protected AppData basis;

public DataResourceBase (Account account, AppData basis) {
public DataResourceBase (Account account, BubbleApp app, AppData basis) {
super(account);
this.app = app;
this.basis = basis;
}

@@ -80,6 +81,21 @@ public abstract class DataResourceBase extends AccountOwnedTemplateResource<AppD
return ok(found);
}

@POST @Path("/{id}"+EP_ACTIONS+"/{action}")
public Response takeAction(@Context ContainerRequest ctx,
@PathParam("id") String id,
@PathParam("action") String action) {
if (isReadOnly(ctx)) return forbidden();
switch (action) {
case "enable": return enable(ctx, id);
case "disable": return disable(ctx, id);
case "delete": return delete(ctx, id);
default:
app.getDataConfig().getDriver(configuration).takeAction(id, action);
return ok();
}
}

@Override protected AppData setReferences(ContainerRequest ctx, Account caller, AppData request) {

copy(request, basis, BASIS_FIELDS);


+ 1
- 0
bubble-server/src/main/resources/message_templates/en_US/server/post_auth/ResourceMessages.properties Ver arquivo

@@ -405,6 +405,7 @@ button_label_app_data_delete_icon=fa fa-trash
message_app_data_previous_page=<< previous page <<
message_app_data_next_page=>> next page >>
message_data_results={{appData.totalCount}} total records, showing page {{query.pageNumber}} of {{numPages}}
message_data_actions=Actions
message_no_data=No Data

# AppSite


+ 2
- 2
bubble-server/src/main/resources/models/apps/user_block/bubbleApp_userBlock.json Ver arquivo

@@ -10,8 +10,8 @@
{"name": "key"}, {"name": "enabled"}, {"name": "ctime"}
],
"actions": [
{"name": "enable", "when": "!data.enabled()"},
{"name": "disable", "when": "data.enabled()"},
{"name": "enable", "when": "!data.enabled"},
{"name": "disable", "when": "data.enabled"},
{"name": "delete"}
],
"views": [


+ 1
- 1
bubble-web

@@ -1 +1 @@
Subproject commit 7f057c060912e80c4fa78e3ace494fec82e050f6
Subproject commit 37f50c4764bfa243aaa26b80a1772574e29679e2

Carregando…
Cancelar
Salvar