Example usage for io.vertx.core.json JsonArray size

List of usage examples for io.vertx.core.json JsonArray size

Introduction

In this page you can find the example usage for io.vertx.core.json JsonArray size.

Prototype

public int size() 

Source Link

Document

Get the number of values in this JSON array

Usage

From source file:org.entcore.workspace.service.impl.DefaultFolderService.java

License:Open Source License

@Override
public void copy(final String id, final String n, final String p, final UserInfos owner, final long emptySize,
        final Handler<Either<String, JsonArray>> result) {
    if (owner == null) {
        result.handle(new Either.Left<String, JsonArray>("workspace.invalid.user"));
        return;/*from  w  w w . ja  v a  2  s .  c o  m*/
    }
    if (id == null || id.trim().isEmpty()) {
        result.handle(new Either.Left<String, JsonArray>("workspace.folder.not.found"));
        return;
    }
    final String path = getOrElse(p, "");
    //If the folder has a parent folder, replicate sharing rights
    String[] splittedPath = path.split("_");
    String parentName = splittedPath[splittedPath.length - 1];
    String parentFolder = path;

    getParentRights(parentName, parentFolder, owner, new Handler<Either<String, JsonArray>>() {
        public void handle(Either<String, JsonArray> event) {
            final JsonArray parentSharedRights = event.right() == null || event.isLeft() ? null
                    : event.right().getValue();

            QueryBuilder query = QueryBuilder.start("_id").is(id).put("owner").is(owner.getUserId());
            JsonObject keys = new JsonObject().put("folder", 1).put("name", 1);

            mongo.findOne(DOCUMENTS_COLLECTION, MongoQueryBuilder.build(query), keys,
                    new Handler<Message<JsonObject>>() {
                        @Override
                        public void handle(Message<JsonObject> event) {
                            final String folder = event.body().getJsonObject("result", new JsonObject())
                                    .getString("folder");
                            final String n1 = event.body().getJsonObject("result", new JsonObject())
                                    .getString("name");
                            if ("ok".equals(event.body().getString("status")) && folder != null
                                    && !folder.trim().isEmpty() && n1 != null && !n1.trim().isEmpty()) {
                                final String folderAttr = "folder";
                                QueryBuilder q = QueryBuilder.start("owner").is(owner.getUserId())
                                        .put(folderAttr)
                                        .regex(Pattern.compile("^" + Pattern.quote(folder) + "($|_)"));
                                mongo.find(DOCUMENTS_COLLECTION, MongoQueryBuilder.build(q),
                                        new Handler<Message<JsonObject>>() {
                                            @Override
                                            public void handle(Message<JsonObject> src) {
                                                final JsonArray origs = src.body().getJsonArray("results",
                                                        new fr.wseduc.webutils.collections.JsonArray());
                                                if ("ok".equals(src.body().getString("status"))
                                                        && origs.size() > 0) {
                                                    long size = 0;
                                                    for (Object o : origs) {
                                                        if (!(o instanceof JsonObject))
                                                            continue;
                                                        JsonObject metadata = ((JsonObject) o)
                                                                .getJsonObject("metadata");
                                                        if (metadata != null) {
                                                            size += metadata.getLong("size", 0l);
                                                        }
                                                    }
                                                    if (size > emptySize) {
                                                        result.handle(new Either.Left<String, JsonArray>(
                                                                "files.too.large"));
                                                        return;
                                                    }
                                                    final AtomicInteger number = new AtomicInteger(
                                                            origs.size());
                                                    final JsonArray insert = new fr.wseduc.webutils.collections.JsonArray();
                                                    String name = (n != null && !n.trim().isEmpty()) ? n : n1;
                                                    final String destFolderName = (path != null
                                                            && !path.trim().isEmpty()) ? path + "_" + name
                                                                    : name;
                                                    QueryBuilder alreadyExist = QueryBuilder.start("owner")
                                                            .is(owner.getUserId()).put("folder")
                                                            .is(destFolderName);
                                                    mongo.count(DOCUMENTS_COLLECTION,
                                                            MongoQueryBuilder.build(alreadyExist),
                                                            new Handler<Message<JsonObject>>() {
                                                                @Override
                                                                public void handle(Message<JsonObject> event) {
                                                                    String destFolder;
                                                                    if ("ok".equals(
                                                                            event.body().getString("status"))
                                                                            && event.body()
                                                                                    .getInteger("count") == 0) {
                                                                        destFolder = destFolderName;
                                                                    } else {
                                                                        destFolder = destFolderName + "-"
                                                                                + format.format(new Date());
                                                                    }
                                                                    for (Object o : origs) {
                                                                        if (!(o instanceof JsonObject))
                                                                            continue;
                                                                        JsonObject orig = (JsonObject) o;
                                                                        final JsonObject dest = orig.copy();
                                                                        String now = MongoDb
                                                                                .formatDate(new Date());
                                                                        dest.remove("_id");
                                                                        dest.put("created", now);
                                                                        dest.put("modified", now);
                                                                        dest.put("folder", dest
                                                                                .getString("folder", "")
                                                                                .replaceFirst(
                                                                                        "^" + Pattern
                                                                                                .quote(folder),
                                                                                        Matcher.quoteReplacement(
                                                                                                destFolder)));
                                                                        dest.put("shared", parentSharedRights);
                                                                        insert.add(dest);
                                                                        String filePath = orig
                                                                                .getString("file");
                                                                        if (filePath != null) {
                                                                            storage.copyFile(filePath,
                                                                                    new Handler<JsonObject>() {
                                                                                        @Override
                                                                                        public void handle(
                                                                                                JsonObject event) {
                                                                                            if (event != null
                                                                                                    && "ok".equals(
                                                                                                            event.getString(
                                                                                                                    "status"))) {
                                                                                                dest.put("file",
                                                                                                        event.getString(
                                                                                                                "_id"));
                                                                                                persist(insert,
                                                                                                        number.decrementAndGet());
                                                                                            }
                                                                                        }
                                                                                    });
                                                                        } else {
                                                                            persist(insert,
                                                                                    number.decrementAndGet());
                                                                        }
                                                                    }
                                                                }
                                                            });
                                                } else {
                                                    result.handle(new Either.Left<String, JsonArray>(
                                                            "workspace.folder.not.found"));
                                                }
                                            }

                                            private void persist(final JsonArray insert, int remains) {
                                                if (remains == 0) {
                                                    mongo.insert(DOCUMENTS_COLLECTION, insert,
                                                            new Handler<Message<JsonObject>>() {
                                                                @Override
                                                                public void handle(
                                                                        Message<JsonObject> inserted) {
                                                                    if ("ok".equals(inserted.body()
                                                                            .getString("status"))) {
                                                                        result.handle(
                                                                                new Either.Right<String, JsonArray>(
                                                                                        insert));
                                                                    } else {
                                                                        result.handle(
                                                                                new Either.Left<String, JsonArray>(
                                                                                        inserted.body()
                                                                                                .getString(
                                                                                                        "message")));
                                                                    }
                                                                }
                                                            });
                                                }
                                            }
                                        });
                            } else {
                                result.handle(new Either.Left<String, JsonArray>("workspace.folder.not.found"));
                            }
                        }
                    });
        }
    });
}

From source file:org.entcore.workspace.service.impl.DefaultFolderService.java

License:Open Source License

@Override
public void delete(String id, final UserInfos owner, final Handler<Either<String, JsonArray>> result) {
    if (owner == null) {
        result.handle(new Either.Left<String, JsonArray>("workspace.invalid.user"));
        return;//from  ww  w.jav  a2  s .co m
    }
    if (id == null || id.trim().isEmpty()) {
        result.handle(new Either.Left<String, JsonArray>("workspace.folder.not.found"));
        return;
    }
    QueryBuilder query = QueryBuilder.start("_id").is(id).put("owner").is(owner.getUserId());
    JsonObject keys = new JsonObject().put("folder", 1);
    mongo.findOne(DOCUMENTS_COLLECTION, MongoQueryBuilder.build(query), keys,
            new Handler<Message<JsonObject>>() {
                @Override
                public void handle(Message<JsonObject> event) {
                    String folder = event.body().getJsonObject("result", new JsonObject()).getString("folder");
                    if ("ok".equals(event.body().getString("status")) && folder != null
                            && !folder.trim().isEmpty()) {
                        QueryBuilder q = QueryBuilder.start("owner").is(owner.getUserId()).put("folder")
                                .regex(Pattern.compile("^" + Pattern.quote(folder) + "($|_)"));
                        JsonObject keys = new JsonObject().put("metadata", 1).put("owner", 1).put("name", 1)
                                .put("file", 1);
                        final JsonObject query = MongoQueryBuilder.build(q);
                        mongo.find(DOCUMENTS_COLLECTION, query, null, keys, new Handler<Message<JsonObject>>() {
                            @Override
                            public void handle(Message<JsonObject> message) {
                                final JsonArray results = message.body().getJsonArray("results");
                                if ("ok".equals(message.body().getString("status")) && results != null) {
                                    mongo.delete(DOCUMENTS_COLLECTION, query,
                                            new Handler<Message<JsonObject>>() {
                                                @Override
                                                public void handle(Message<JsonObject> res) {
                                                    if ("ok".equals(res.body().getString("status"))) {
                                                        result.handle(
                                                                new Either.Right<String, JsonArray>(results));
                                                        final JsonArray filesIds = new fr.wseduc.webutils.collections.JsonArray();
                                                        for (Object o : results) {
                                                            if (!(o instanceof JsonObject))
                                                                continue;
                                                            String file = ((JsonObject) o).getString("file");
                                                            if (file != null && !file.trim().isEmpty()) {
                                                                filesIds.add(file);
                                                            }
                                                        }
                                                        if (filesIds.size() > 0) {
                                                            storage.removeFiles(filesIds,
                                                                    new Handler<JsonObject>() {
                                                                        @Override
                                                                        public void handle(
                                                                                JsonObject jsonObject) {
                                                                            if (!"ok".equals(jsonObject
                                                                                    .getString("status"))) {
                                                                                log.error(
                                                                                        "Error deleting gridfs files : "
                                                                                                + filesIds
                                                                                                        .encode());
                                                                                log.error(jsonObject
                                                                                        .getString("message"));
                                                                            }
                                                                        }
                                                                    });
                                                        }
                                                    } else {
                                                        result.handle(new Either.Left<String, JsonArray>(
                                                                res.body().getString("message")));
                                                    }
                                                }
                                            });
                                } else {
                                    result.handle(new Either.Left<String, JsonArray>(
                                            message.body().getString("message")));
                                }
                            }
                        });
                    } else {
                        result.handle(new Either.Left<String, JsonArray>("workspace.folder.not.found"));
                    }
                }
            });
}

From source file:org.entcore.workspace.service.impl.DefaultFolderService.java

License:Open Source License

private void shareFolderAction(final String id, final UserInfos owner, final List<String> actions,
        final String groupId, final String userId, final ShareService shareService, final boolean remove,
        final JsonObject share, final Handler<Either<String, JsonObject>> result) {

    if (owner == null) {
        result.handle(new Either.Left<String, JsonObject>("workspace.invalid.user"));
        return;// w w  w.  ja  v a2  s  . c  o m
    }
    if (id == null || id.trim().isEmpty()) {
        result.handle(new Either.Left<String, JsonObject>("workspace.folder.not.found"));
        return;
    }

    String sharedMethod = "org-entcore-workspace-service-WorkspaceService|shareJsonSubmit";

    List<DBObject> groups = new ArrayList<>();
    groups.add(QueryBuilder.start("userId").is(owner.getUserId()).put(sharedMethod).is(true).get());
    for (String gpId : owner.getGroupsIds()) {
        groups.add(QueryBuilder.start("groupId").is(gpId).put(sharedMethod).is(true).get());
    }

    final DBObject managerCheck = QueryBuilder.start("shared")
            .elemMatch(new QueryBuilder().or(groups.toArray(new DBObject[groups.size()])).get()).get();

    QueryBuilder query = QueryBuilder.start("_id").is(id).put("file").exists(false)
            .or(QueryBuilder.start("owner").is(owner.getUserId()).get(), managerCheck);

    JsonObject keys = new JsonObject().put("folder", 1).put("name", 1);

    Handler<Message<JsonObject>> folderHandler = new Handler<Message<JsonObject>>() {
        @Override
        public void handle(Message<JsonObject> event) {
            final String folder = event.body().getJsonObject("result", new JsonObject()).getString("folder");

            QueryBuilder q = QueryBuilder.start()
                    .or(QueryBuilder.start("owner").is(owner.getUserId()).get(), managerCheck).put("folder")
                    .regex(Pattern.compile("^" + Pattern.quote(folder) + "($|_)")).put("_id").notEquals(id);

            mongo.find(DOCUMENTS_COLLECTION, MongoQueryBuilder.build(q), new Handler<Message<JsonObject>>() {

                public void handle(Message<JsonObject> d) {

                    JsonArray files = d.body().getJsonArray("results",
                            new fr.wseduc.webutils.collections.JsonArray());

                    if ("ok".equals(d.body().getString("status"))) {

                        if (files.size() == 0) {
                            result.handle(new Either.Right<String, JsonObject>(
                                    new JsonObject("{ \"number\": 0, \"number-errors\": 0 }")));
                            return;
                        }

                        final AtomicInteger remaining = new AtomicInteger(files.size());
                        final AtomicInteger count = new AtomicInteger(0);
                        final AtomicInteger errorcount = new AtomicInteger(0);

                        Handler<Either<String, JsonObject>> recursiveHandler = new Handler<Either<String, JsonObject>>() {
                            @Override
                            public void handle(Either<String, JsonObject> event) {
                                if (event.isRight())
                                    count.getAndAdd(1);
                                else
                                    errorcount.getAndAdd(1);

                                if (remaining.decrementAndGet() == 0) {
                                    JsonObject response = new JsonObject();
                                    response.put("number", count);
                                    response.put("number-errors", errorcount);
                                    result.handle(new Either.Right<String, JsonObject>(response));
                                }
                            }
                        };

                        for (Object o : files) {
                            if (!(o instanceof JsonObject))
                                continue;
                            JsonObject file = (JsonObject) o;

                            if (share != null) {
                                shareService.share(owner.getUserId(), file.getString("_id"), share,
                                        recursiveHandler);
                            } else {
                                if (groupId != null) {
                                    if (remove)
                                        shareService.removeGroupShare(groupId, file.getString("_id"), actions,
                                                recursiveHandler);
                                    else
                                        shareService.groupShare(owner.getUserId(), groupId,
                                                file.getString("_id"), actions, recursiveHandler);
                                } else if (userId != null) {
                                    if (remove)
                                        shareService.removeUserShare(userId, file.getString("_id"), actions,
                                                recursiveHandler);
                                    else
                                        shareService.userShare(owner.getUserId(), userId, file.getString("_id"),
                                                actions, recursiveHandler);
                                }
                            }
                        }

                    } else {
                        result.handle(new Either.Left<String, JsonObject>("workspace.folder.not.found"));
                    }
                }
            });

        }
    };

    mongo.findOne(DOCUMENTS_COLLECTION, MongoQueryBuilder.build(query), keys, folderHandler);
}

From source file:org.entcore.workspace.service.impl.DefaultFolderService.java

License:Open Source License

public void rename(String id, final String newName, final UserInfos owner,
        final Handler<Either<String, JsonObject>> result) {
    if (owner == null) {
        result.handle(new Either.Left<String, JsonObject>("workspace.invalid.user"));
        return;//from www.  j av  a2 s  .c  om
    }
    if (id == null || id.trim().isEmpty()) {
        result.handle(new Either.Left<String, JsonObject>("workspace.folder.not.found"));
        return;
    }

    final QueryBuilder query = QueryBuilder.start("_id").is(id).put("owner").is(owner.getUserId()).and("file")
            .exists(false);
    final JsonObject keys = new JsonObject().put("folder", 1).put("name", 1);

    Handler<Message<JsonObject>> folderHandler = new Handler<Message<JsonObject>>() {
        @Override
        public void handle(Message<JsonObject> event) {
            final String folder = event.body().getJsonObject("result", new JsonObject()).getString("folder");
            final String newFolderPath = folder.lastIndexOf("_") < 0 ? newName
                    : folder.substring(0, folder.lastIndexOf("_") + 1) + newName;

            //3 - Find & rename children
            final Handler<Message<JsonObject>> renameChildren = new Handler<Message<JsonObject>>() {
                public void handle(Message<JsonObject> event) {

                    if (!"ok".equals(event.body().getString("status"))) {
                        result.handle(Utils.validResult(event));
                        return;
                    }

                    QueryBuilder targetQuery = QueryBuilder.start("owner").is(owner.getUserId());
                    targetQuery.or(
                            QueryBuilder.start("folder")
                                    .regex(Pattern.compile("^" + Pattern.quote(folder) + "($|_)")).get(),
                            QueryBuilder.start("old-folder")
                                    .regex(Pattern.compile("^" + Pattern.quote(folder) + "($|_)")).get());

                    mongo.find(DOCUMENTS_COLLECTION, MongoQueryBuilder.build(targetQuery),
                            new Handler<Message<JsonObject>>() {
                                @Override
                                public void handle(Message<JsonObject> d) {
                                    JsonArray children = d.body().getJsonArray("results",
                                            new fr.wseduc.webutils.collections.JsonArray());
                                    if ("ok".equals(d.body().getString("status")) && children.size() > 0) {
                                        final AtomicInteger remaining = new AtomicInteger(children.size());
                                        final AtomicInteger count = new AtomicInteger(0);

                                        Handler<Message<JsonObject>> recursiveHandler = new Handler<Message<JsonObject>>() {
                                            @Override
                                            public void handle(Message<JsonObject> res) {
                                                count.getAndAdd(res.body().getInteger("number", 0));
                                                if (remaining.decrementAndGet() == 0) {
                                                    res.body().put("number", count.get());
                                                    result.handle(Utils.validResult(res));
                                                }
                                            }
                                        };

                                        for (Object o : children) {
                                            if (!(o instanceof JsonObject)) {
                                                remaining.decrementAndGet();
                                                continue;
                                            }
                                            JsonObject child = (JsonObject) o;

                                            String childFolder = child.getString("folder");
                                            String childOldFolder = child.getString("old-folder");
                                            String id = child.getString("_id");

                                            JsonObject updateMatcher = MongoQueryBuilder
                                                    .build(QueryBuilder.start("_id").is(id));
                                            MongoUpdateBuilder updateModifier = new MongoUpdateBuilder();
                                            if (childOldFolder != null || childFolder.equals("Trash")) {
                                                String newPath = childOldFolder.lastIndexOf("_") < 0 ? newName
                                                        : childOldFolder.replaceFirst(Pattern.quote(folder),
                                                                Matcher.quoteReplacement(newFolderPath));
                                                updateModifier.set("old-folder", newPath);
                                            } else {
                                                String newPath = childFolder.lastIndexOf("_") < 0 ? newName
                                                        : childFolder.replaceFirst(Pattern.quote(folder),
                                                                Matcher.quoteReplacement(newFolderPath));
                                                updateModifier.set("folder", newPath);
                                            }

                                            mongo.update(DOCUMENTS_COLLECTION, updateMatcher,
                                                    updateModifier.build(), recursiveHandler);
                                        }

                                    } else {
                                        result.handle(Utils.validResult(d));
                                    }
                                }
                            });
                }
            };

            //2 - Rename target folder
            mongo.update(DOCUMENTS_COLLECTION, MongoQueryBuilder.build(query), new JsonObject(
                    "{ \"$set\": { \"folder\": \"" + newFolderPath + "\", \"name\": \"" + newName + "\" }}"),
                    renameChildren);
        }
    };

    //1 - Find the folder
    mongo.findOne(DOCUMENTS_COLLECTION, MongoQueryBuilder.build(query), keys, folderHandler);
}

From source file:org.entcore.workspace.service.impl.WorkspaceRepositoryEvents.java

License:Open Source License

@Override
public void exportResources(final String exportId, final String userId, JsonArray g, final String exportPath,
        final String locale, String host, final Handler<Boolean> handler) {
    log.debug("Workspace export resources.");
    List<DBObject> groups = new ArrayList<>();
    groups.add(QueryBuilder.start("userId").is(userId).get());
    for (Object o : g) {
        if (!(o instanceof String))
            continue;
        String gpId = (String) o;
        groups.add(QueryBuilder.start("groupId").is(gpId).get());
    }/* ww  w  . j  a v  a 2 s . com*/
    QueryBuilder b = new QueryBuilder().or(QueryBuilder.start("owner").is(userId).get(),
            QueryBuilder.start("shared")
                    .elemMatch(new QueryBuilder().or(groups.toArray(new DBObject[groups.size()])).get()).get(),
            QueryBuilder.start("old_shared")
                    .elemMatch(new QueryBuilder().or(groups.toArray(new DBObject[groups.size()])).get()).get())
            .put("file").exists(true);
    final JsonObject keys = new JsonObject().put("file", 1).put("name", 1);
    final JsonObject query = MongoQueryBuilder.build(b);
    mongo.find(DocumentDao.DOCUMENTS_COLLECTION, query, null, keys, new Handler<Message<JsonObject>>() {
        @Override
        public void handle(Message<JsonObject> event) {
            final AtomicBoolean exported = new AtomicBoolean(false);
            final JsonArray documents = event.body().getJsonArray("results");
            if ("ok".equals(event.body().getString("status")) && documents != null) {
                QueryBuilder b = QueryBuilder.start("to").is(userId).put("file").exists(true);
                final JsonObject q = MongoQueryBuilder.build(b);
                mongo.find(RackDao.RACKS_COLLECTION, q, null, keys, new Handler<Message<JsonObject>>() {
                    @Override
                    public void handle(Message<JsonObject> event) {
                        JsonArray racks = event.body().getJsonArray("results");
                        if ("ok".equals(event.body().getString("status")) && racks != null) {
                            final Set<String> usedFileName = new HashSet<>();
                            final JsonObject alias = new JsonObject();
                            final String[] ids = new String[racks.size() + documents.size()];
                            for (int i = 0; i < documents.size(); i++) {
                                JsonObject j = documents.getJsonObject(i);
                                ids[i] = j.getString("file");
                                String fileName = j.getString("name");
                                if (fileName != null && fileName.contains("/")) {
                                    fileName = fileName.replaceAll("/", "-");
                                }
                                if (usedFileName.add(fileName)) {
                                    alias.put(ids[i], fileName);
                                } else {
                                    alias.put(ids[i], ids[i] + "_" + fileName);
                                }
                            }
                            for (int i = 0; i < racks.size(); i++) {
                                JsonObject j = racks.getJsonObject(i);
                                ids[i] = j.getString("file");
                                String fileName = j.getString("name");
                                if (fileName != null && fileName.contains("/")) {
                                    fileName = fileName.replaceAll("/", "-");
                                }
                                if (usedFileName.add(fileName)) {
                                    alias.put(ids[i], fileName);
                                } else {
                                    alias.put(ids[i], ids[i] + "_" + fileName);
                                }
                            }
                            exportFiles(alias, ids, exportPath, locale, exported, handler);
                        } else {
                            log.error("Rack " + q.encode() + " - " + event.body().getString("message"));
                            handler.handle(exported.get());
                        }
                    }
                });
            } else {
                log.error("Documents " + query.encode() + " - " + event.body().getString("message"));
                handler.handle(exported.get());
            }
        }
    });
}

From source file:org.entcore.workspace.service.impl.WorkspaceRepositoryEvents.java

License:Open Source License

private void exportFiles(final JsonObject alias, final String[] ids, String exportPath, String locale,
        final AtomicBoolean exported, final Handler<Boolean> handler) {
    createExportDirectory(exportPath, locale, new Handler<String>() {
        @Override//from w  ww  .  j  a  va  2  s.com
        public void handle(String path) {
            if (path != null) {
                if (ids.length == 0) {
                    handler.handle(true);
                    return;
                }
                storage.writeToFileSystem(ids, path, alias, new Handler<JsonObject>() {
                    @Override
                    public void handle(JsonObject event) {
                        if ("ok".equals(event.getString("status"))) {
                            exported.set(true);
                            handler.handle(exported.get());
                        } else {
                            JsonArray errors = event.getJsonArray("errors",
                                    new fr.wseduc.webutils.collections.JsonArray());
                            boolean ignoreErrors = errors.size() > 0;
                            for (Object o : errors) {
                                if (!(o instanceof JsonObject))
                                    continue;
                                if (((JsonObject) o).getString("message") == null || (!((JsonObject) o)
                                        .getString("message").contains("NoSuchFileException")
                                        && !((JsonObject) o).getString("message")
                                                .contains("FileAlreadyExistsException"))) {
                                    ignoreErrors = false;
                                    break;
                                }
                            }
                            if (ignoreErrors) {
                                exported.set(true);
                                handler.handle(exported.get());
                            } else {
                                log.error("Write to fs : "
                                        + new fr.wseduc.webutils.collections.JsonArray(Arrays.asList(ids))
                                                .encode()
                                        + " - " + event.encode());
                                handler.handle(exported.get());
                            }
                        }
                    }
                });
            } else {
                log.error("Create export directory error.");
                handler.handle(exported.get());
            }
        }
    });
}

From source file:org.entcore.workspace.service.impl.WorkspaceRepositoryEvents.java

License:Open Source License

@Override
public void deleteUsers(JsonArray users) {
    String[] userIds = new String[users.size()];
    for (int i = 0; i < users.size(); i++) {
        JsonObject j = users.getJsonObject(i);
        String id = j.getString("id");
        userIds[i] = id;// w  ww .  j  a va 2s . co  m
    }
    final JsonObject queryDocuments = MongoQueryBuilder.build(QueryBuilder.start("owner").in(userIds));
    deleteFiles(queryDocuments, DocumentDao.DOCUMENTS_COLLECTION);
    final JsonObject queryRacks = MongoQueryBuilder.build(QueryBuilder.start("to").in(userIds));
    deleteFiles(queryRacks, RackDao.RACKS_COLLECTION);
    deleteFiles(queryDocuments, Workspace.REVISIONS_COLLECTION);

    final JsonObject query = MongoQueryBuilder.build(QueryBuilder.start("shared.userId").in(userIds));
    JsonObject update = new JsonObject().put("$pull",
            new JsonObject().put("shared", MongoQueryBuilder.build(QueryBuilder.start("userId").in(userIds))));
    mongo.update(DocumentDao.DOCUMENTS_COLLECTION, query, update, false, true,
            new Handler<Message<JsonObject>>() {
                @Override
                public void handle(Message<JsonObject> event) {
                    if (!"ok".equals(event.body().getString("status"))) {
                        log.error(event.body().getString("message"));
                    }
                }
            });
}

From source file:org.entcore.workspace.service.impl.WorkspaceRepositoryEvents.java

License:Open Source License

private void deleteFiles(final JsonObject query, final String collection) {
    mongo.find(collection, query, null, new JsonObject().put("file", 1), new Handler<Message<JsonObject>>() {
        @Override/*from   w w w. ja v  a2 s. co m*/
        public void handle(Message<JsonObject> res) {
            String status = res.body().getString("status");
            JsonArray results = res.body().getJsonArray("results");
            if ("ok".equals(status) && results != null && results.size() > 0) {
                JsonArray fileIds = new fr.wseduc.webutils.collections.JsonArray();
                for (Object o : results) {
                    if (o instanceof JsonObject) {
                        fileIds.add(((JsonObject) o).getString("file"));
                    }
                }
                storage.removeFiles(fileIds, new Handler<JsonObject>() {
                    @Override
                    public void handle(JsonObject event) {
                        if (event == null) {
                            log.error("Error deleting files ");
                        } else if (!"ok".equals(event.getString("status"))) {
                            log.error("Error deleting files : " + event.encode());
                        }
                    }
                });
                mongo.delete(collection, query, new Handler<Message<JsonObject>>() {
                    @Override
                    public void handle(Message<JsonObject> event) {
                        if (!"ok".equals(event.body().getString("status"))) {
                            log.error("Error deleting documents : " + event.body().encode());
                        } else {
                            log.info("Documents deleted : " + event.body().getInteger("number"));
                        }
                    }
                });
            }
        }
    });
}

From source file:org.entcore.workspace.service.impl.WorkspaceSearchingEvents.java

License:Open Source License

@Override
@SuppressWarnings("unchecked")
public void searchResource(List<String> appFilters, final String userId, JsonArray groupIds,
        JsonArray searchWords, Integer page, Integer limit, final JsonArray columnsHeader, final String locale,
        final Handler<Either<String, JsonArray>> handler) {
    if (appFilters.contains(WorkspaceSearchingEvents.class.getSimpleName())) {

        final List<String> searchWordsLst = searchWords.getList();

        final List<String> groupIdsLst = groupIds.getList();
        final List<DBObject> groups = new ArrayList<>();
        groups.add(QueryBuilder.start("userId").is(userId).get());
        for (String gpId : groupIdsLst) {
            groups.add(QueryBuilder.start("groupId").is(gpId).get());
        }/*  www.  ja  v a2 s . c om*/

        final QueryBuilder rightsQuery = new QueryBuilder().or(
                QueryBuilder.start("visibility").is(VisibilityFilter.PUBLIC.name()).get(),
                QueryBuilder.start("visibility").is(VisibilityFilter.PROTECTED.name()).get(),
                QueryBuilder.start("visibility").is(VisibilityFilter.PROTECTED.name()).get(),
                QueryBuilder.start("owner").is(userId).get(),
                QueryBuilder.start("shared")
                        .elemMatch(new QueryBuilder().or(groups.toArray(new DBObject[groups.size()])).get())
                        .get());

        final QueryBuilder worldsQuery = new QueryBuilder();
        worldsQuery.text(MongoDbSearchService.textSearchedComposition(searchWordsLst));

        //searching only the file entry (not folder), if folder match and is returned, the paginate system is impacted
        final QueryBuilder fileQuery = QueryBuilder.start("file").exists(true);

        final QueryBuilder query = new QueryBuilder().and(fileQuery.get(), rightsQuery.get(),
                worldsQuery.get());

        JsonObject sort = new JsonObject().put("modified", -1);
        final JsonObject projection = new JsonObject();
        projection.put("name", 1);
        projection.put("modified", 1);
        projection.put("folder", 1);
        projection.put("owner", 1);
        projection.put("ownerName", 1);
        projection.put("comments", 1);

        final int skip = (0 == page) ? -1 : page * limit;

        //main search on file
        mongo.find(this.collection, MongoQueryBuilder.build(query), sort, projection, skip, limit,
                Integer.MAX_VALUE, validResultsHandler(new Handler<Either<String, JsonArray>>() {
                    @Override
                    public void handle(Either<String, JsonArray> event) {

                        if (event.isRight()) {
                            final JsonArray globalJa = event.right().getValue();
                            //different owner can have the same folder name
                            //if the folder exists, we must find id of folder according to the directory name and the owner,
                            //it's necessary to use the front route for the resource link
                            final QueryBuilder foldersOwnersOrQuery = new QueryBuilder();
                            Boolean isFolderProcessing = false;

                            for (int i = 0; i < globalJa.size(); i++) {
                                final JsonObject j = globalJa.getJsonObject(i);

                                // processing only files that have a folder
                                if (j != null && !StringUtils.isEmpty(j.getString("folder"))) {
                                    isFolderProcessing = true;
                                    final QueryBuilder folderOwnerQuery = new QueryBuilder();
                                    folderOwnerQuery.and(
                                            QueryBuilder.start("folder").is(j.getString("folder")).get(),
                                            QueryBuilder.start("owner").is(j.getString("owner")).get());
                                    foldersOwnersOrQuery.or(folderOwnerQuery.get());
                                }
                            }

                            final Map<String, Map<String, String>> mapOwnerMapNameFolderId = new HashMap<>();
                            //finding ids of folder found.
                            if (isFolderProcessing) {
                                //find only authorized folder entry and not file
                                final QueryBuilder queryFindFolderIds = new QueryBuilder().and(
                                        QueryBuilder.start("file").exists(false).get(), rightsQuery.get(),
                                        foldersOwnersOrQuery.get());
                                //search all folder of main result set and format the search result
                                findFoldersIdAndFormatResult(globalJa, queryFindFolderIds, columnsHeader,
                                        searchWordsLst, locale, userId, handler);
                            } else {
                                //all files without folder
                                final JsonArray res = formatSearchResult(globalJa, columnsHeader,
                                        searchWordsLst, locale, userId, mapOwnerMapNameFolderId);
                                handler.handle(new Either.Right<String, JsonArray>(res));
                            }
                        } else {
                            handler.handle(new Either.Left<String, JsonArray>(event.left().getValue()));
                        }
                        if (log.isDebugEnabled()) {
                            log.debug(
                                    "[WorkspaceSearchingEvents][searchResource] The resources searched by user are finded");
                        }
                    }
                }));
    } else {
        handler.handle(new Either.Right<String, JsonArray>(new fr.wseduc.webutils.collections.JsonArray()));
    }
}

From source file:org.entcore.workspace.service.impl.WorkspaceSearchingEvents.java

License:Open Source License

private void findFoldersIdAndFormatResult(final JsonArray globalJa, QueryBuilder queryFindFolderIds,
        final JsonArray columnsHeader, final List<String> searchWordsLst, final String locale,
        final String userId, final Handler<Either<String, JsonArray>> handler) {
    final JsonObject projection = new JsonObject();
    projection.put("folder", 1);
    projection.put("owner", 1);
    mongo.find(collection, MongoQueryBuilder.build(queryFindFolderIds), null, projection,
            new Handler<Message<JsonObject>>() {
                @Override//from w w w.  j av  a  2  s .c om
                public void handle(Message<JsonObject> event) {
                    final Either<String, JsonArray> ei = validResults(event);
                    if (ei.isRight()) {
                        final JsonArray folderJa = ei.right().getValue();
                        final Map<String, Map<String, String>> mapOwnerMapNameFolderId = new HashMap<>();
                        // fill the map owner key with map folder name key, folder id value
                        for (int i = 0; i < folderJa.size(); i++) {
                            final JsonObject j = folderJa.getJsonObject(i);
                            if (j != null) {
                                final String owner = j.getString("owner", "");
                                if (mapOwnerMapNameFolderId.containsKey(owner)) {
                                    mapOwnerMapNameFolderId.get(owner).put(j.getString("folder"),
                                            j.getString("_id"));
                                } else {
                                    final Map<String, String> mapFolderId = new HashMap<>();
                                    mapFolderId.put(j.getString("folder"), j.getString("_id"));
                                    mapOwnerMapNameFolderId.put(owner, mapFolderId);
                                }
                            }
                        }
                        final JsonArray res = formatSearchResult(globalJa, columnsHeader, searchWordsLst,
                                locale, userId, mapOwnerMapNameFolderId);
                        handler.handle(new Either.Right<String, JsonArray>(res));
                    } else {
                        handler.handle(new Either.Left<String, JsonArray>(ei.left().getValue()));
                    }
                }
            });
}