Package com.psddev.dari.db

Examples of com.psddev.dari.db.DatabaseEnvironment


        Predicate visibilitiesPredicate = null;

        for (String visibility : visibilities) {
            if ("p".equals(visibility)) {
                Set<String> comparisonKeys = new HashSet<String>();
                DatabaseEnvironment environment = Database.Static.getDefault().getEnvironment();

                addVisibilityFields(comparisonKeys, environment);

                for (ObjectType type : environment.getTypes()) {
                    addVisibilityFields(comparisonKeys, type);
                }

                for (String key : comparisonKeys) {
                    if (showDrafts) {
View Full Code Here


        if (isOnlyPathed()) {
            query.and(Directory.Static.hasPathPredicate());
        }

        if (isAllSearchable && selectedType == null) {
            DatabaseEnvironment environment = Database.Static.getDefault().getEnvironment();
            String q = getQueryString();

            if (!ObjectUtils.isBlank(q)) {
                q = q.replaceAll("\\s+", "").toLowerCase(Locale.ENGLISH);

                for (ObjectType t : environment.getTypes()) {
                    String name = t.getDisplayName();

                    if (!ObjectUtils.isBlank(name) &&
                            q.contains(name.replaceAll("\\s+", "").toLowerCase(Locale.ENGLISH))) {
                        query.sortRelevant(20.0, "_type = ?", t.as(ToolUi.class).findDisplayTypes());
                    }
                }
            }

            query.sortRelevant(10.0, "_type = ?", environment.getTypeByClass(Singleton.class).as(ToolUi.class).findDisplayTypes());
        }

        String additionalPredicate = getAdditionalPredicate();

        if (!ObjectUtils.isBlank(additionalPredicate)) {
            Object parent = Query.
                    from(Object.class).
                    where("_id = ?", getParentId()).
                    first();
            if (parent == null && getParentTypeId() != null) {
                ObjectType parentType = ObjectType.getInstance(getParentTypeId());
                parent = parentType.createObject(null);
            }
            query.and(additionalPredicate, parent);
        }

        String advancedQuery = getAdvancedQuery();

        if (!ObjectUtils.isBlank(advancedQuery)) {
            query.and(advancedQuery);
        }

        for (String filter : getGlobalFilters().values()) {
            if (filter != null) {
                query.and("* matches ?", filter);
            }
        }

        for (Map.Entry<String, Map<String, String>> entry : getFieldFilters().entrySet()) {
            Map<String, String> value = entry.getValue();

            if (value == null) {
                continue;
            }

            String fieldName = selectedType != null ?
                    selectedType.getInternalName() + "/" + entry.getKey() :
                    entry.getKey();

            if (ObjectUtils.to(boolean.class, value.get("m"))) {
                query.and(fieldName + " = missing");

            } else {
                String fieldValue = value.get("");
                String queryType = value.get("t");

                if ("d".equals(queryType)) {
                    Date start = ObjectUtils.to(Date.class, fieldValue);
                    Date end = ObjectUtils.to(Date.class, value.get("x"));

                    if (start != null) {
                        query.and(fieldName + " >= ?", start);
                    }

                    if (end != null) {
                        query.and(fieldName + " <= ?", end);
                    }

                } else if ("n".equals(queryType)) {
                    Double minimum = ObjectUtils.to(Double.class, fieldValue);
                    Double maximum = ObjectUtils.to(Double.class, value.get("x"));

                    if (minimum != null) {
                        query.and(fieldName + " >= ?", fieldValue);
                    }

                    if (maximum != null) {
                        query.and(fieldName + " <= ?", maximum);
                    }

                } else {
                    if (fieldValue == null) {
                        continue;
                    }

                    if ("t".equals(queryType)) {
                        query.and(fieldName + " matches ?", fieldValue);

                    } else if ("b".equals(queryType)) {
                        query.and(fieldName + ("true".equals(fieldValue) ? " = true" : " != true"));

                    } else {
                        query.and(fieldName + " = ?", fieldValue);
                    }
                }
            }
        }

        if (site != null &&
                !site.isAllSitesAccessible()) {
            Set<ObjectType> globalTypes = new HashSet<ObjectType>();

            if (selectedType != null) {
                addGlobalTypes(globalTypes, selectedType);

            } else {
                for (ObjectType type : validTypes) {
                    addGlobalTypes(globalTypes, type);
                }
            }

            query.and(CompoundPredicate.combine(
                    PredicateParser.OR_OPERATOR,
                    site.itemsPredicate(),
                    PredicateParser.Static.parse("_type = ?", globalTypes)));
        }

        Collection<String> visibilities = getVisibilities();

        if (!visibilities.isEmpty()) {

            Predicate visibilitiesPredicate = getVisibilitiesPredicate(selectedType, visibilities, validTypeIds, isShowDrafts());

            query.and(visibilitiesPredicate);

        } else if (selectedType == null &&
                isAllSearchable) {
            Set<String> comparisonKeys = new HashSet<String>();
            DatabaseEnvironment environment = Database.Static.getDefault().getEnvironment();

            addVisibilityFields(comparisonKeys, environment);

            for (ObjectType type : environment.getTypes()) {
                addVisibilityFields(comparisonKeys, type);
            }

            for (String key : comparisonKeys) {
                if (isShowDrafts()) {
                    query.and(key + " = missing or " + key + " != missing or " + key + " = true");

                } else {
                    query.and(key + " = missing");
                }
            }

        } else if (isShowDrafts()) {
            Set<String> comparisonKeys = new HashSet<String>();
            DatabaseEnvironment environment = Database.Static.getDefault().getEnvironment();

            addVisibilityFields(comparisonKeys, environment);
            addVisibilityFields(comparisonKeys, selectedType);

            for (String key : comparisonKeys) {
View Full Code Here

    private static class CompatibleTypesProcessor implements ObjectType.AnnotationProcessor<CompatibleTypes> {

        @Override
        public void process(ObjectType type, CompatibleTypes annotation) {
            Set<ObjectType> compatibleTypes = new HashSet<ObjectType>();
            DatabaseEnvironment environment = type.getState().getDatabase().getEnvironment();
            for (Class<?> typeClass : annotation.value()) {
                ObjectType compatibleType = environment.getTypeByClass(typeClass);
                if (compatibleType != null) {
                    compatibleTypes.add(compatibleType);
                }
            }
            setCompatibleTypes(type, compatibleTypes);
View Full Code Here

        return "area/dashboard";
    }

    @Override
    protected void doService(ToolPageContext page) throws IOException, ServletException {
        DatabaseEnvironment environment = Database.Static.getDefault().getEnvironment();
        Exception postError = null;
        ObjectType selectedType = environment.getTypeById(page.param(UUID.class, "type"));
        String containerId = page.param(String.class, "containerId");

        if (page.isFormPost()) {
            try {
                MultipartRequest request = MultipartRequestFilter.Static.getInstance(page.getRequest());

                if (request == null) {
                    throw new IllegalStateException("Not multipart!");
                }

                ErrorUtils.errorIfNull(selectedType, "type");

                ObjectField previewField = getPreviewField(selectedType);

                if (previewField == null) {
                    throw new IllegalStateException("No file field!");
                }

                FileItem[] files = request.getFileItems("file");
                StringBuilder js = new StringBuilder();

                if (files != null && files.length > 0) {
                    Object common = selectedType.createObject(page.param(UUID.class, "typeForm-" + selectedType.getId()));

                    page.updateUsingParameters(common);

                    for (FileItem file : files) {

                        // Checks to make sure the file's content type is valid
                        String groupsPattern = Settings.get(String.class, "cms/tool/fileContentTypeGroups");
                        Set<String> contentTypeGroups = new SparseSet(ObjectUtils.isBlank(groupsPattern) ? "+/" : groupsPattern);

                        if (!contentTypeGroups.contains(file.getContentType())) {
                            page.getErrors().add(new IllegalArgumentException(String.format(
                                    "Invalid content type [%s]. Must match the pattern [%s].",
                                    file.getContentType(), contentTypeGroups)));
                            continue;
                        }

                        // Disallow HTML disguising as other content types per:
                        // http://www.adambarth.com/papers/2009/barth-caballero-song.pdf
                        if (!contentTypeGroups.contains("text/html")) {
                            InputStream input = file.getInputStream();

                            try {
                                byte[] buffer = new byte[1024];
                                String data = new String(buffer, 0, input.read(buffer)).toLowerCase(Locale.ENGLISH);
                                String ptr = data.trim();

                                if (ptr.startsWith("<!") ||
                                        ptr.startsWith("<?") ||
                                        data.startsWith("<html") ||
                                        data.startsWith("<script") ||
                                        data.startsWith("<title") ||
                                        data.startsWith("<body") ||
                                        data.startsWith("<head") ||
                                        data.startsWith("<plaintext") ||
                                        data.startsWith("<table") ||
                                        data.startsWith("<img") ||
                                        data.startsWith("<pre") ||
                                        data.startsWith("text/html") ||
                                        data.startsWith("<a") ||
                                        ptr.startsWith("<frameset") ||
                                        ptr.startsWith("<iframe") ||
                                        ptr.startsWith("<link") ||
                                        ptr.startsWith("<base") ||
                                        ptr.startsWith("<style") ||
                                        ptr.startsWith("<div") ||
                                        ptr.startsWith("<p") ||
                                        ptr.startsWith("<font") ||
                                        ptr.startsWith("<applet") ||
                                        ptr.startsWith("<meta") ||
                                        ptr.startsWith("<center") ||
                                        ptr.startsWith("<form") ||
                                        ptr.startsWith("<isindex") ||
                                        ptr.startsWith("<h1") ||
                                        ptr.startsWith("<h2") ||
                                        ptr.startsWith("<h3") ||
                                        ptr.startsWith("<h4") ||
                                        ptr.startsWith("<h5") ||
                                        ptr.startsWith("<h6") ||
                                        ptr.startsWith("<b") ||
                                        ptr.startsWith("<br")) {
                                    page.getErrors().add(new IllegalArgumentException(String.format(
                                            "Can't upload [%s] file disguising as HTML!",
                                            file.getContentType())));
                                    continue;
                                }

                            } finally {
                                input.close();
                            }
                        }

                        if (file.getSize() == 0) {
                            continue;
                        }

                        StringBuilder path = new StringBuilder();
                        String random = UUID.randomUUID().toString().replace("-", "");
                        String fileName = file.getName();
                        int lastDotAt = fileName.indexOf('.');
                        String extension;

                        if (lastDotAt > -1) {
                            extension = fileName.substring(lastDotAt);
                            fileName = fileName.substring(0, lastDotAt);

                        } else {
                            extension = "";
                        }

                        if (ObjectUtils.isBlank(fileName)) {
                            fileName = UUID.randomUUID().toString().replace("-", "");
                        }

                        path.append(random.substring(0, 2));
                        path.append('/');
                        path.append(random.substring(2, 4));
                        path.append('/');
                        path.append(random.substring(4));
                        path.append('/');
                        path.append(StringUtils.toNormalized(fileName));
                        path.append(extension);

                        Map<String, List<String>> httpHeaders = new LinkedHashMap<String, List<String>>();

                        httpHeaders.put("Cache-Control", Collections.singletonList("public, max-age=31536000"));
                        httpHeaders.put("Content-Length", Collections.singletonList(String.valueOf(file.getSize())));
                        httpHeaders.put("Content-Type", Collections.singletonList(file.getContentType()));

                        String storageSetting = previewField.as(ToolUi.class).getStorageSetting();
                        StorageItem item = StorageItem.Static.createIn(storageSetting != null ? Settings.getOrDefault(String.class, storageSetting, null) : null);
                        String contentType = file.getContentType();

                        item.setPath(path.toString());
                        item.setContentType(contentType);
                        item.getMetadata().put("http.headers", httpHeaders);
                        item.getMetadata().put("originalFilename", fileName);
                        item.setData(file.getInputStream());

                        if (contentType != null && contentType.startsWith("image/")) {
                            InputStream fileInput = file.getInputStream();

                            try {
                                ImageMetadataMap metadata = new ImageMetadataMap(fileInput);
                                List<Throwable> errors = metadata.getErrors();

                                item.getMetadata().putAll(metadata);

                                if (!errors.isEmpty()) {
                                    LOGGER.info("Can't read image metadata!", new AggregateException(errors));
                                }

                            } finally {
                                IoUtils.closeQuietly(fileInput);
                            }
                        }

                        item.save();

                        Object object = selectedType.createObject(null);
                        State state = State.getInstance(object);

                        state.setValues(State.getInstance(common));

                        Site site = page.getSite();

                        if (site != null &&
                                site.getDefaultVariation() != null) {
                            state.as(Variation.Data.class).setInitialVariation(site.getDefaultVariation());
                        }

                        state.put(previewField.getInternalName(), item);
                        state.as(BulkUploadDraft.class).setContainerId(containerId);
                        page.publish(state);

                        js.append("$addButton.repeatable('add', function() {");
                            js.append("var $added = $(this);");
                            js.append("$input = $added.find(':input.objectId').eq(0);");
                            js.append("$input.attr('data-label', '").append(StringUtils.escapeJavaScript(state.getLabel())).append("');");
                            js.append("$input.attr('data-preview', '").append(StringUtils.escapeJavaScript(page.getPreviewThumbnailUrl(object))).append("');");
                            js.append("$input.val('").append(StringUtils.escapeJavaScript(state.getId().toString())).append("');");
                            js.append("$input.change();");
                        js.append("});");
                    }
                }

                if (page.getErrors().isEmpty()) {
                    page.writeStart("div", "id", page.createId()).writeEnd();

                    page.writeStart("script", "type", "text/javascript");
                        page.write("if (typeof jQuery !== 'undefined') (function($, win, undef) {");
                            page.write("var $page = $('#" + page.getId() + "'),");
                            page.write("$init = $page.popup('source').repeatable('closestInit'),");
                            page.write("$addButton = $init.find('.addButton').eq(0),");
                            page.write("$input;");
                            page.write("if ($addButton.length > 0) {");
                                page.write(js.toString());
                                page.write("$page.popup('close');");
                            page.write("} else {");
                                page.write("win.location.reload();");
                            page.write("}");
                        page.write("})(jQuery, window);");
                    page.writeEnd();

                    return;
                }

            } catch (Exception error) {
                postError = error;
            }
        }

        Set<ObjectType> typesSet = new HashSet<ObjectType>();

        for (UUID typeId : page.params(UUID.class, "typeId")) {
            ObjectType type = environment.getTypeById(typeId);

            if (type != null) {
                for (ObjectType t : type.as(ToolUi.class).findDisplayTypes()) {
                    for (ObjectField field : t.getFields()) {
                        if (ObjectField.FILE_TYPE.equals(field.getInternalItemType())) {
View Full Code Here

        return null;
    }

    @Override
    protected void doService(final ToolPageContext page) throws IOException, ServletException {
        DatabaseEnvironment environment = Database.Static.getDefault().getEnvironment();
        ObjectType type = environment.getTypeById(page.param(UUID.class, TYPE_PARAMETER));
        String predicate = page.param(String.class, PREDICATE_PARAMETER);
        List<ObjectField> allFields = new ArrayList<ObjectField>();

        for (String fieldName : new String[] {
                "cms.content.publishDate",
                "cms.content.publishUser",
                "cms.content.updateDate",
                "cms.content.updateUser",
                "cms.directory.paths" }) {
            allFields.add(environment.getField(fieldName));
        }

        if (type != null) {
            allFields.addAll(type.getFields());
        }

        List<String> fieldNames = page.params(String.class, FIELDS_PARAMETER);
        List<ObjectField> fields = new ArrayList<ObjectField>();

        for (ObjectField field : allFields) {
            if (fieldNames.contains(field.getInternalName())) {
                fields.add(field);
            }
        }

        Collections.sort(allFields);
        Collections.sort(fields);

        List<UUID> ids = page.params(UUID.class, ITEMS_PARAMETER);
        Query<Object> query = (type != null ?
                Query.fromType(type) :
                Query.fromGroup(Content.SEARCHABLE_GROUP)).
                where(predicate);

        if (page.param(String.class, "action-download") != null) {
            HttpServletResponse response = page.getResponse();

            response.setContentType("text/csv");
            response.setHeader("Content-Disposition", "attachment; filename=search-result-" + new DateTime(null, page.getUserDateTimeZone()).toString("yyyy-MM-dd-hh-mm-ss") + ".csv");

            page.putOverride(Recordable.class, new HtmlFormatter<Recordable>() {
                @Override
                public void format(HtmlWriter writer, Recordable object) throws IOException {
                    ToolPageContext page = (ToolPageContext) writer;
                    writer.write(page.getObjectLabel(object));
                }
            });

            page.putOverride(Metric.class, new HtmlFormatter<Metric>() {
                @Override
                public void format(HtmlWriter writer, Metric object) throws IOException {
                    writer.write(new Double(object.getSum()).toString());
                }
            });

            page.putOverride(StorageItem.class, new HtmlFormatter<StorageItem>() {
                @Override
                public void format(HtmlWriter writer, StorageItem item) throws IOException {
                    writer.write(item.getPublicUrl());
                }
            });

            page.write('\ufeff');

            page.write("\"");
            writeCsvItem(page, "Type");
            page.write("\",\"");
            writeCsvItem(page, "Label");
            page.write("\"");

            for (ObjectField field : fields) {
                page.write(",\"");
                writeCsvItem(page, field.getDisplayName());
                page.write("\"");
            }

            page.write("\r\n");

            for (Object item : query.iterable(0)) {
                State itemState = State.getInstance(item);

                if (!ids.isEmpty() && !ids.contains(itemState.getId())) {
                    continue;
                }

                page.write("\"");
                writeCsvItem(page, page.getTypeLabel(item));
                page.write("\",\"");
                writeCsvItem(page, page.getObjectLabel(item));
                page.write("\"");

                for (ObjectField field : fields) {
                    page.write(",\"");

                    if ("cms.directory.paths".equals(field.getInternalName())) {
                        for (Iterator<Directory.Path> i = itemState.as(Directory.ObjectModification.class).getPaths().iterator(); i.hasNext();) {
                            Directory.Path p = i.next();
                            String path = p.getPath();

                            page.writeHtml(path);
                            page.writeHtml(" (");
                            page.writeHtml(p.getType());
                            page.writeHtml(")");

                            if (i.hasNext()) {
                                page.write(", ");
                            }
                        }

                    } else {
                        for (Iterator<Object> i = CollectionUtils.recursiveIterable(itemState.get(field.getInternalName())).iterator(); i.hasNext();) {
                            Object value = i.next();
                            page.writeObject(value);
                            if (i.hasNext()) {
                                page.write(", ");
                            }
                        }
                    }

                    page.write("\"");
                }

                page.write("\r\n");
            }

            return;

        } else if (page.param(String.class, "action-trash") != null) {
            Iterator<Object> queryIterator = query.iterable(0).iterator();

            try {
                while (queryIterator.hasNext()) {
                    Object item = queryIterator.next();
                    State itemState = State.getInstance(item);

                    if (!ids.isEmpty() && !ids.contains(itemState.getId())) {
                        continue;
                    }

                    page.trash(item);
                }

            } finally {
                if (queryIterator instanceof Closeable) {
                    ((Closeable) queryIterator).close();
                }
            }

            page.getResponse().sendRedirect(page.param(String.class, "returnUrl"));
            return;
        }

        long offset = page.param(long.class, "offset");
        int limit = page.pageParam(int.class, "limit", 20);
        PaginatedResult<Object> result;

        try {
            result = query.select(offset, limit);

        } catch (RuntimeException error) {
            result = null;
        }

        page.putOverride(Recordable.class, new HtmlFormatter<Recordable>() {
            @Override
            public void format(HtmlWriter writer, Recordable object) throws IOException {
                ToolPageContext page = (ToolPageContext) writer;
                page.writeObjectLabel(object);
            }
        });

        page.putOverride(Metric.class, new HtmlFormatter<Metric>() {
            @Override
            public void format(HtmlWriter writer, Metric object) throws IOException {
                writer.write(new Double(object.getSum()).toString());
            }
        });

        page.putOverride(Content.class, new HtmlFormatter<Content>() {
            @Override
            public void format(HtmlWriter writer, Content content) throws IOException {
                ToolPageContext page = (ToolPageContext) writer;
                page.writeStart("a",
                        "href", page.objectUrl("/content/edit.jsp", content));
                    page.writeObjectLabel(content);
                page.writeEnd();
            }
        });

        page.putOverride(StorageItem.class, new HtmlFormatter<StorageItem>() {
            @Override
            public void format(HtmlWriter writer, StorageItem item) throws IOException {
                ToolPageContext page = (ToolPageContext) writer;
                page.writeElement("img",
                        "height", 100,
                        "src", ImageEditor.Static.getDefault() != null ?
                                new ImageTag.Builder(item).setHeight(100).toUrl() :
                                item.getPublicUrl());
            }
        });

        page.writeHeader();
            page.writeStart("div", "class", "widget");
                page.writeStart("h1", "class", "icon icon-search");
                    page.writeHtml("Advanced Search");
                page.writeEnd();

                page.writeStart("form",
                        "method", "get",
                        "action", page.url(null));
                    page.writeStart("div", "class", "inputContainer");
                        page.writeStart("div", "class", "inputLabel");
                            page.writeStart("label", "for", page.createId());
                                page.writeHtml("Type");
                            page.writeEnd();
                        page.writeEnd();

                        page.writeStart("div", "class", "inputSmall");
                            page.writeTypeSelect(
                                    environment.getTypes(),
                                    type,
                                    "Any Types",
                                    "data-bsp-autosubmit", "",
                                    "name", TYPE_PARAMETER,
                                    "data-searchable", true);
View Full Code Here

        if (type != null) {
            Collection<?> ids = (Collection<?>) type.getState().get(COMPATIBLE_TYPES_FIELD);

            if (!ObjectUtils.isBlank(ids)) {
                DatabaseEnvironment environment = type.getState().getDatabase().getEnvironment();

                for (Object idObject : ids) {
                    ObjectType compatibleType = environment.getTypeById(ObjectUtils.to(UUID.class, idObject));

                    if (compatibleType != null) {
                        types.add(compatibleType);
                    }
                }
View Full Code Here

            String comparisonTypeParam = paramPrefix + ".ct";
            String comparisonPathParam = paramPrefix + ".cp";
            String comparisonOperatorParam = paramPrefix + ".co";
            String comparisonValueParam = paramPrefix + ".cv";
            DatabaseEnvironment environment = Database.Static.getDefault().getEnvironment();
            Set<UUID> comparisonTypeIds = new HashSet<UUID>();
            Set<ObjectType> comparisonTypes = new HashSet<ObjectType>();

            for (UUID id : page.params(UUID.class, comparisonTypeParam)) {
                comparisonTypeIds.add(id);
View Full Code Here

    @Override
    protected void doService(ToolPageContext page) throws IOException, ServletException {
        Search search = new Search(page);
        Query<?> query = search.toQuery(page.getSite());
        DatabaseEnvironment environment = Database.Static.getDefault().getEnvironment();
        ObjectType type = search.getSelectedType();
        List<Display> allDisplays = new ArrayList<Display>();

        allDisplays.add(new ReferencesDisplay());
        allDisplays.add(new PathsDisplay());

        for (String name : new String[] {
                "cms.content.publishDate",
                "cms.content.publishUser",
                "cms.content.updateDate",
                "cms.content.updateUser" }) {

            allDisplays.add(new ObjectFieldDisplay(environment.getField(name)));
        }

        if (type != null) {
            for (ObjectField field : type.getFields()) {
                allDisplays.add(new ObjectFieldDisplay(field));
View Full Code Here

    }

    public List<ObjectField> getSortableFields() {
        if (sortableFields == null) {
            List<ObjectField> newSortableFields = new ArrayList<ObjectField>();
            DatabaseEnvironment environment = getQueryType().getState().getDatabase().getEnvironment();

            newSortableFields.add(environment.getField("cms.content.publishDate"));
            newSortableFields.add(environment.getField("cms.content.updateDate"));

            for (ObjectField field : getIndexedFields()) {
                if (!field.isInternalCollectionType()) {
                    newSortableFields.add(field);
                }
View Full Code Here

TOP

Related Classes of com.psddev.dari.db.DatabaseEnvironment

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.