Search in sources :

Example 6 with State

use of org.craftercms.studio.api.v1.service.objectstate.State in project studio by craftercms.

the class ObjectStateServiceImpl method transitionBulk.

@RetryingOperation
@Override
@ValidateParams
public void transitionBulk(@ValidateStringParam(name = "site") String site, List<String> paths, TransitionEvent event, State defaultTargetState) {
    if (paths != null && !paths.isEmpty()) {
        Map<String, Object> params = new HashMap<>();
        params.put("site", site);
        params.put("paths", paths);
        List<ItemState> itemStates = itemStateMapper.getObjectStateForSiteAndPaths(params);
        Map<State, List<String>> bulkSubsets = new HashMap<>();
        for (ItemState state : itemStates) {
            if (!bulkSubsets.containsKey(state.getState())) {
                bulkSubsets.put(State.valueOf(state.getState()), new ArrayList<String>());
            }
            bulkSubsets.get(State.valueOf(state.getState())).add(state.getObjectId());
        }
        State nextState = null;
        for (Map.Entry<State, List<String>> entry : bulkSubsets.entrySet()) {
            if (entry.getKey() == null) {
                params = new HashMap<>();
                params.put("site", site);
                params.put("paths", paths);
                params.put("state", defaultTargetState.name());
                itemStateMapper.setObjectStateForSiteAndPaths(params);
            } else {
                nextState = transitionTable[entry.getKey().ordinal()][event.ordinal()];
                if (nextState != entry.getKey() && nextState != State.NOOP) {
                    params = new HashMap<>();
                    params.put("site", site);
                    params.put("paths", paths);
                    params.put("state", nextState.name());
                    itemStateMapper.setObjectStateForSiteAndPaths(params);
                } else if (nextState == State.NOOP) {
                    logger.warn("Transition not defined for event " + event.name() + " and current state " + entry.getKey().name() + " [setting object state for multiple objects]");
                }
            }
        }
    }
}
Also used : HashMap(java.util.HashMap) State(org.craftercms.studio.api.v1.service.objectstate.State) ItemState(org.craftercms.studio.api.v1.dal.ItemState) ItemState(org.craftercms.studio.api.v1.dal.ItemState) ArrayList(java.util.ArrayList) List(java.util.List) HashMap(java.util.HashMap) Map(java.util.Map) RetryingOperation(org.craftercms.studio.api.v2.annotation.RetryingOperation) ValidateParams(org.craftercms.commons.validation.annotations.param.ValidateParams)

Example 7 with State

use of org.craftercms.studio.api.v1.service.objectstate.State in project studio by craftercms.

the class ObjectStateServiceImpl method isUpdatedOrNew.

@Override
@ValidateParams
public boolean isUpdatedOrNew(@ValidateStringParam(name = "site") String site, @ValidateSecurePathParam(name = "path") String path) {
    path = FilenameUtils.normalize(path, true);
    ItemState state = getObjectState(site, path);
    if (state != null) {
        return State.isUpdateOrNew(State.valueOf(state.getState()));
    } else {
        return false;
    }
}
Also used : ItemState(org.craftercms.studio.api.v1.dal.ItemState) ValidateParams(org.craftercms.commons.validation.annotations.param.ValidateParams)

Example 8 with State

use of org.craftercms.studio.api.v1.service.objectstate.State in project studio by craftercms.

the class ObjectStateServiceImpl method insertNewEntry.

@Override
@ValidateParams
public void insertNewEntry(@ValidateStringParam(name = "site") String site, @ValidateSecurePathParam(name = "path") String path) {
    String itemPath = FilenameUtils.normalize(path, true);
    String lockKey = site + ":" + path;
    generalLockService.lock(lockKey);
    try {
        Map<String, String> params = new HashMap<String, String>();
        params.put("site", site);
        params.put("path", itemPath);
        ItemState state = itemStateMapper.getObjectStateBySiteAndPath(params);
        if (state == null) {
            ItemState newEntry = new ItemState();
            newEntry.setObjectId(UUID.randomUUID().toString());
            newEntry.setSite(site);
            newEntry.setPath(itemPath);
            newEntry.setSystemProcessing(0);
            newEntry.setState(State.NEW_UNPUBLISHED_UNLOCKED.name());
            itemStateMapper.insertEntry(newEntry);
        }
    } finally {
        generalLockService.unlock(lockKey);
    }
}
Also used : HashMap(java.util.HashMap) ItemState(org.craftercms.studio.api.v1.dal.ItemState) ValidateParams(org.craftercms.commons.validation.annotations.param.ValidateParams)

Example 9 with State

use of org.craftercms.studio.api.v1.service.objectstate.State in project studio by craftercms.

the class ObjectStateServiceImpl method getObjectState.

@Override
@ValidateParams
public ItemState getObjectState(@ValidateStringParam(name = "site") String site, @ValidateSecurePathParam(name = "path") String path, boolean insert) {
    String cleanPath = FilenameUtils.normalize(path, true);
    String lockId = site + ":" + cleanPath;
    ItemState state = null;
    Map<String, String> params = new HashMap<String, String>();
    params.put("site", site);
    params.put("path", cleanPath);
    state = itemStateMapper.getObjectStateBySiteAndPath(params);
    if (state == null && insert) {
        if (contentService.contentExists(site, cleanPath)) {
            ContentItemTO item = contentService.getContentItem(site, cleanPath, 0);
            if (!item.isFolder()) {
                insertNewEntry(site, item);
                state = itemStateMapper.getObjectStateBySiteAndPath(params);
            }
        }
    }
    return state;
}
Also used : ContentItemTO(org.craftercms.studio.api.v1.to.ContentItemTO) HashMap(java.util.HashMap) ItemState(org.craftercms.studio.api.v1.dal.ItemState) ValidateParams(org.craftercms.commons.validation.annotations.param.ValidateParams)

Example 10 with State

use of org.craftercms.studio.api.v1.service.objectstate.State in project studio by craftercms.

the class ObjectStateServiceImpl method isInWorkflow.

@Override
@ValidateParams
public boolean isInWorkflow(@ValidateStringParam(name = "site") String site, @ValidateSecurePathParam(name = "path") String path) {
    path = FilenameUtils.normalize(path, true);
    ItemState state = getObjectState(site, path);
    if (state != null) {
        return State.isInWorkflow(State.valueOf(state.getState()));
    } else {
        return false;
    }
}
Also used : ItemState(org.craftercms.studio.api.v1.dal.ItemState) ValidateParams(org.craftercms.commons.validation.annotations.param.ValidateParams)

Aggregations

ItemState (org.craftercms.studio.api.v1.dal.ItemState)24 ValidateParams (org.craftercms.commons.validation.annotations.param.ValidateParams)19 HashMap (java.util.HashMap)14 ContentItemTO (org.craftercms.studio.api.v1.to.ContentItemTO)8 ArrayList (java.util.ArrayList)7 State (org.craftercms.studio.api.v1.service.objectstate.State)6 ItemMetadata (org.craftercms.studio.api.v1.dal.ItemMetadata)4 ServiceLayerException (org.craftercms.studio.api.v1.exception.ServiceLayerException)4 RetryingOperation (org.craftercms.studio.api.v2.annotation.RetryingOperation)3 Map (java.util.Map)2 EntitlementException (org.craftercms.commons.entitlements.exception.EntitlementException)2 SiteFeed (org.craftercms.studio.api.v1.dal.SiteFeed)2 PreviewEventContext (org.craftercms.studio.api.v1.ebus.PreviewEventContext)2 ContentNotFoundException (org.craftercms.studio.api.v1.exception.ContentNotFoundException)2 SiteNotFoundException (org.craftercms.studio.api.v1.exception.SiteNotFoundException)2 DeploymentException (org.craftercms.studio.api.v1.service.deployment.DeploymentException)2 File (java.io.File)1 FileInputStream (java.io.FileInputStream)1 FileNotFoundException (java.io.FileNotFoundException)1 IOException (java.io.IOException)1