org.craftercms.studio.impl.v1.service.content.ObjectMetadataManagerImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.craftercms.studio.impl.v1.service.content.ObjectMetadataManagerImpl.java

Source

/*
 * Crafter Studio Web-content authoring solution
 * Copyright (C) 2007-2016 Crafter Software Corporation.
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package org.craftercms.studio.impl.v1.service.content;

import org.apache.commons.io.FilenameUtils;
import org.craftercms.commons.validation.annotations.param.ValidateParams;
import org.craftercms.commons.validation.annotations.param.ValidateSecurePathParam;
import org.craftercms.commons.validation.annotations.param.ValidateStringParam;
import org.craftercms.studio.api.v1.dal.ItemMetadata;
import org.craftercms.studio.api.v1.dal.ItemMetadataMapper;
import org.craftercms.studio.api.v1.log.Logger;
import org.craftercms.studio.api.v1.log.LoggerFactory;
import org.craftercms.studio.api.v1.service.content.ObjectMetadataManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ObjectMetadataManagerImpl implements ObjectMetadataManager {

    private final static Logger logger = LoggerFactory.getLogger(ObjectMetadataManagerImpl.class);

    @Autowired
    protected ItemMetadataMapper itemMetadataMapper;

    @Override
    @ValidateParams
    public void insertNewObjectMetadata(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        path = FilenameUtils.normalize(path, true);
        Map<String, String> params = new HashMap<>();
        params.put("site", site);
        params.put("path", path);
        try {
            itemMetadataMapper.insertEntry(params);
        } catch (DuplicateKeyException e) {
            logger.debug("Failed to insert metadata for site: " + site + " and path: " + path
                    + " into item_metadata table, because it is duplicate entry.");
        }
    }

    @Override
    @ValidateParams
    public void setObjectMetadata(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path, Map<String, Object> properties) {
        path = FilenameUtils.normalize(path, true);
        Map<String, Object> params = new HashMap<>();
        params.put("site", site);
        params.put("path", path);
        params.putAll(properties);
        itemMetadataMapper.setProperties(params);
    }

    @Override
    @ValidateParams
    public void setObjectMetadataForCommitId(@ValidateStringParam(name = "site") String site,
            @ValidateStringParam(name = "commitId") String commitId, Map<String, Object> properties) {
        Map<String, Object> params = new HashMap<>();
        params.put("site", site);
        params.put("commitId", commitId);
        params.putAll(properties);
        itemMetadataMapper.setPropertiesForCommit(params);
    }

    @Override
    public void updateObjectMetadata(ItemMetadata itemMetadata) {
        itemMetadataMapper.updateObjectMetadata(itemMetadata);
    }

    @Override
    @ValidateParams
    public ItemMetadata getProperties(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        String cleanPath = FilenameUtils.normalize(path, true);
        Map<String, String> params = new HashMap<>();
        params.put("site", site);
        params.put("path", cleanPath);
        return itemMetadataMapper.getProperties(params);
    }

    @Override
    @ValidateParams
    public boolean metadataExist(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        path = FilenameUtils.normalize(path, true);
        Map<String, String> params = new HashMap<>();
        params.put("site", site);
        params.put("path", path);
        int cnt = itemMetadataMapper.countEntries(params);
        if (cnt < 1) {
            return false;
        } else if (cnt > 1) {
            return false;
        } else {
            return true;
        }
    }

    @Override
    @ValidateParams
    public boolean isRenamed(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        path = FilenameUtils.normalize(path, true);
        if (metadataExist(site, path)) {
            ItemMetadata metadata = getProperties(site, path);
            return metadata.getRenamed() > 0;
        } else {
            return false;
        }
    }

    @Override
    @ValidateParams
    public String getOldPath(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        path = FilenameUtils.normalize(path, true);
        if (metadataExist(site, path)) {
            ItemMetadata metadata = getProperties(site, path);
            return metadata.getOldUrl();
        } else {
            return "";
        }
    }

    @Override
    @ValidateParams
    public void lockContent(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path,
            @ValidateStringParam(name = "lockOwner") String lockOwner) {
        path = FilenameUtils.normalize(path, true);
        if (!metadataExist(site, path)) {
            insertNewObjectMetadata(site, path);
        }
        Map<String, Object> params = new HashMap<>();
        params.put("site", site);
        params.put("path", path);
        params.put("lockOwner", lockOwner);
        itemMetadataMapper.setLockOwner(params);
    }

    @Override
    @ValidateParams
    public void unLockContent(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        path = FilenameUtils.normalize(path, true);
        if (!metadataExist(site, path)) {
            insertNewObjectMetadata(site, path);
        }
        Map<String, Object> params = new HashMap<>();
        params.put("site", site);
        params.put("path", path);
        params.put("lockOwner", null);
        itemMetadataMapper.setLockOwner(params);
    }

    @Override
    @ValidateParams
    public void deleteObjectMetadataForSite(@ValidateStringParam(name = "site") String site) {
        Map<String, String> params = new HashMap<>();
        params.put("site", site);
        itemMetadataMapper.deleteObjectMetadataForSite(params);
    }

    @Override
    @ValidateParams
    public void deleteObjectMetadata(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        path = FilenameUtils.normalize(path, true);
        Map<String, String> params = new HashMap<>();
        params.put("site", site);
        params.put("path", path);
        itemMetadataMapper.deleteEntry(params);
    }

    @Override
    @ValidateParams
    public void deleteObjectMetadataForFolder(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        path = FilenameUtils.normalize(path, true);
        Map<String, String> params = new HashMap<>();
        params.put("site", site);
        params.put("path", path + "/%");
        itemMetadataMapper.deleteFolder(params);
    }

    @Override
    @ValidateParams
    public void updateObjectPath(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "oldPath") String oldPath,
            @ValidateSecurePathParam(name = "newPath") String newPath) {
        newPath = FilenameUtils.normalize(newPath, true);
        oldPath = FilenameUtils.normalize(oldPath, true);
        Map<String, Object> params = new HashMap<>();
        params.put("site", site);
        params.put("oldPath", oldPath);
        params.put("newPath", newPath);
        itemMetadataMapper.updateObjectPath(params);
    }

    @Override
    @ValidateParams
    public void clearRenamed(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        path = FilenameUtils.normalize(path, true);
        Map<String, Object> params = new HashMap<>();
        params.put("renamed", false);
        params.put(ItemMetadata.PROP_OLD_URL, "");
        setObjectMetadata(site, path, params);
    }

    @Override
    @ValidateParams
    public void updateCommitId(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path,
            @ValidateStringParam(name = "commitId") String commitId) {
        path = FilenameUtils.normalize(path, true);
        Map<String, Object> params = new HashMap<>();
        params.put("site", site);
        params.put("path", path);
        params.put("commitId", commitId);
        itemMetadataMapper.updateCommitId(params);
    }

    @Override
    @ValidateParams
    public boolean movedPathExists(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("siteId", site);
        params.put("path", path);
        return itemMetadataMapper.movedPathExists(params) > 0;
    }

    @Override
    @ValidateParams
    public List<String> getSameCommitItems(@ValidateStringParam(name = "site") String site,
            @ValidateSecurePathParam(name = "path") String path) {
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("siteId", site);
        params.put("path", path);
        return itemMetadataMapper.getSameCommitItems(params);
    }
}