Search in sources :

Example 11 with ContentData

use of org.alfresco.service.cmr.repository.ContentData in project records-management by Alfresco.

the class RecordServiceImpl method onRemoveAspect.

/**
 * @see org.alfresco.repo.node.NodeServicePolicies.OnRemoveAspectPolicy#onRemoveAspect(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.namespace.QName)
 */
@Override
@Behaviour(kind = BehaviourKind.CLASS, type = "sys:noContent")
public void onRemoveAspect(NodeRef nodeRef, QName aspect) {
    if (nodeService.hasAspect(nodeRef, ASPECT_RECORD)) {
        ContentData contentData = (ContentData) nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT);
        if (ContentData.hasContent(contentData) && contentData.getSize() > 0) {
            appendIdentifierToName(nodeService, nodeRef);
            reevaluateIncompleteTag(nodeRef);
        }
    }
}
Also used : ContentData(org.alfresco.service.cmr.repository.ContentData) Behaviour(org.alfresco.repo.policy.annotation.Behaviour)

Example 12 with ContentData

use of org.alfresco.service.cmr.repository.ContentData in project acs-community-packaging by Alfresco.

the class DocumentPropertiesDialog method save.

/**
 * Event handler used to save the edited properties back to the repository
 *
 * @return The outcome
 */
public String save() {
    String outcome = "cancel";
    UserTransaction tx = null;
    try {
        tx = Repository.getUserTransaction(FacesContext.getCurrentInstance());
        tx.begin();
        NodeRef nodeRef = this.browseBean.getDocument().getNodeRef();
        Map<String, Object> props = this.editableNode.getProperties();
        // get the name and move the node as necessary
        String name = (String) props.get(ContentModel.PROP_NAME);
        if (name != null) {
            getFileFolderService().rename(nodeRef, name);
        }
        Map<QName, Serializable> properties = getNodeService().getProperties(nodeRef);
        // we need to put all the properties from the editable bag back into
        // the format expected by the repository
        // Deal with the special mimetype property for ContentData
        String mimetype = (String) props.get(TEMP_PROP_MIMETYPE);
        if (mimetype != null) {
            // remove temporary prop from list so it isn't saved with the others
            props.remove(TEMP_PROP_MIMETYPE);
            ContentData contentData = (ContentData) props.get(ContentModel.PROP_CONTENT);
            if (contentData != null) {
                contentData = ContentData.setMimetype(contentData, mimetype);
                props.put(ContentModel.PROP_CONTENT.toString(), contentData);
            }
        }
        // Deal with the special encoding property for ContentData
        String encoding = (String) props.get(TEMP_PROP_ENCODING);
        if (encoding != null) {
            // remove temporary prop from list so it isn't saved with the others
            props.remove(TEMP_PROP_ENCODING);
            ContentData contentData = (ContentData) props.get(ContentModel.PROP_CONTENT);
            if (contentData != null) {
                contentData = ContentData.setEncoding(contentData, encoding);
                props.put(ContentModel.PROP_CONTENT.toString(), contentData);
            }
        }
        // extra and deal with the Author prop if the aspect has not been applied yet
        String author = (String) props.get(ContentModel.PROP_AUTHOR);
        if (author != null && author.length() != 0) {
            // add aspect if required
            if (getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_AUTHOR) == false) {
                Map<QName, Serializable> authorProps = new HashMap<QName, Serializable>(1, 1.0f);
                authorProps.put(ContentModel.PROP_AUTHOR, author);
                getNodeService().addAspect(nodeRef, ContentModel.ASPECT_AUTHOR, authorProps);
            }
        // else it will get updated in the later setProperties() call
        }
        // deal with adding the "titled" aspect if required
        String title = (String) props.get(ContentModel.PROP_TITLE);
        String description = (String) props.get(ContentModel.PROP_DESCRIPTION);
        if (title != null || description != null) {
            // add the aspect to be sure it's present
            getNodeService().addAspect(nodeRef, ContentModel.ASPECT_TITLED, null);
        // props will get added later in setProperties()
        }
        // add the remaining properties
        Iterator<String> iterProps = props.keySet().iterator();
        while (iterProps.hasNext()) {
            String propName = iterProps.next();
            QName qname = QName.createQName(propName);
            // make sure the property is represented correctly
            Serializable propValue = (Serializable) props.get(propName);
            // check for empty strings when using number types, set to null in this case
            if ((propValue != null) && (propValue instanceof String) && (propValue.toString().length() == 0)) {
                PropertyDefinition propDef = getDictionaryService().getProperty(qname);
                if (propDef != null) {
                    if (propDef.getDataType().getName().equals(DataTypeDefinition.DOUBLE) || propDef.getDataType().getName().equals(DataTypeDefinition.FLOAT) || propDef.getDataType().getName().equals(DataTypeDefinition.INT) || propDef.getDataType().getName().equals(DataTypeDefinition.LONG)) {
                        propValue = null;
                    }
                }
            }
            properties.put(qname, propValue);
        }
        // send the properties back to the repository
        getNodeService().setProperties(this.browseBean.getDocument().getNodeRef(), properties);
        // we also need to persist any association changes that may have been made
        // add any associations added in the UI
        Map<String, Map<String, AssociationRef>> addedAssocs = this.editableNode.getAddedAssociations();
        for (Map<String, AssociationRef> typedAssoc : addedAssocs.values()) {
            for (AssociationRef assoc : typedAssoc.values()) {
                getNodeService().createAssociation(assoc.getSourceRef(), assoc.getTargetRef(), assoc.getTypeQName());
            }
        }
        // remove any association removed in the UI
        Map<String, Map<String, AssociationRef>> removedAssocs = this.editableNode.getRemovedAssociations();
        for (Map<String, AssociationRef> typedAssoc : removedAssocs.values()) {
            for (AssociationRef assoc : typedAssoc.values()) {
                getNodeService().removeAssociation(assoc.getSourceRef(), assoc.getTargetRef(), assoc.getTypeQName());
            }
        }
        // add any child associations added in the UI
        Map<String, Map<String, ChildAssociationRef>> addedChildAssocs = this.editableNode.getAddedChildAssociations();
        for (Map<String, ChildAssociationRef> typedAssoc : addedChildAssocs.values()) {
            for (ChildAssociationRef assoc : typedAssoc.values()) {
                getNodeService().addChild(assoc.getParentRef(), assoc.getChildRef(), assoc.getTypeQName(), assoc.getTypeQName());
            }
        }
        // remove any child association removed in the UI
        Map<String, Map<String, ChildAssociationRef>> removedChildAssocs = this.editableNode.getRemovedChildAssociations();
        for (Map<String, ChildAssociationRef> typedAssoc : removedChildAssocs.values()) {
            for (ChildAssociationRef assoc : typedAssoc.values()) {
                getNodeService().removeChild(assoc.getParentRef(), assoc.getChildRef());
            }
        }
        // commit the transaction
        tx.commit();
        // set the outcome to refresh
        outcome = "finish";
        // reset the document held by the browse bean as it's just been updated
        this.browseBean.getDocument().reset();
    } catch (FileExistsException e) {
        // rollback the transaction
        try {
            if (tx != null) {
                tx.rollback();
            }
        } catch (Exception ex) {
        }
        // print status message
        String statusMsg = MessageFormat.format(Application.getMessage(FacesContext.getCurrentInstance(), "error_exists"), e.getName());
        Utils.addErrorMessage(statusMsg);
        // no outcome
        outcome = null;
    } catch (InvalidNodeRefException err) {
        // rollback the transaction
        try {
            if (tx != null) {
                tx.rollback();
            }
        } catch (Exception ex) {
        }
        Utils.addErrorMessage(MessageFormat.format(Application.getMessage(FacesContext.getCurrentInstance(), Repository.ERROR_NODEREF), new Object[] { this.browseBean.getDocument().getId() }));
        // this failure means the node no longer exists - we cannot show the doc properties screen
        outcome = "browse";
    } catch (Throwable e) {
        // rollback the transaction
        try {
            if (tx != null) {
                tx.rollback();
            }
        } catch (Exception ex) {
        }
        Utils.addErrorMessage(MessageFormat.format(Application.getMessage(FacesContext.getCurrentInstance(), Repository.ERROR_GENERIC), e.getMessage()), e);
    }
    return outcome;
}
Also used : UserTransaction(javax.transaction.UserTransaction) Serializable(java.io.Serializable) HashMap(java.util.HashMap) QName(org.alfresco.service.namespace.QName) ChildAssociationRef(org.alfresco.service.cmr.repository.ChildAssociationRef) PropertyDefinition(org.alfresco.service.cmr.dictionary.PropertyDefinition) AssociationRef(org.alfresco.service.cmr.repository.AssociationRef) ChildAssociationRef(org.alfresco.service.cmr.repository.ChildAssociationRef) FileExistsException(org.alfresco.service.cmr.model.FileExistsException) InvalidNodeRefException(org.alfresco.service.cmr.repository.InvalidNodeRefException) NodeRef(org.alfresco.service.cmr.repository.NodeRef) ContentData(org.alfresco.service.cmr.repository.ContentData) InvalidNodeRefException(org.alfresco.service.cmr.repository.InvalidNodeRefException) HashMap(java.util.HashMap) Map(java.util.Map) FileExistsException(org.alfresco.service.cmr.model.FileExistsException)

Example 13 with ContentData

use of org.alfresco.service.cmr.repository.ContentData in project acs-community-packaging by Alfresco.

the class CheckinCheckoutDialog method checkinFileOK.

/**
 * Action called upon completion of the Check In file page
 */
public String checkinFileOK(final FacesContext context, String outcome) {
    // NOTE: for checkin the document node _is_ the working document!
    final Node node = property.getDocument();
    if (node != null && (property.getCopyLocation().equals(CCProperties.COPYLOCATION_CURRENT) || (this.getFileName() != null && !this.getFileName().equals("")))) {
        try {
            RetryingTransactionHelper txnHelper = Repository.getRetryingTransactionHelper(FacesContext.getCurrentInstance());
            RetryingTransactionCallback<Object> callback = new RetryingTransactionCallback<Object>() {

                public Object execute() throws Throwable {
                    if (logger.isDebugEnabled())
                        logger.debug("Trying to checkin content node Id: " + node.getId());
                    // we can either checkin the content from the current working copy node
                    // which would have been previously updated by the user
                    String contentUrl;
                    if (property.getCopyLocation().equals(CCProperties.COPYLOCATION_CURRENT)) {
                        ContentData contentData = (ContentData) node.getProperties().get(ContentModel.PROP_CONTENT);
                        contentUrl = (contentData == null ? null : contentData.getContentUrl());
                    } else // or specify a specific file as the content instead
                    {
                        // add the content to an anonymous but permanent writer location
                        // we can then retrieve the URL to the content to to be set on the node during checkin
                        ContentWriter writer = property.getContentService().getWriter(node.getNodeRef(), ContentModel.PROP_CONTENT, true);
                        // also update the mime type in case a different type of file is uploaded
                        String mimeType = Repository.getMimeTypeForFileName(context, property.getFileName());
                        writer.setMimetype(mimeType);
                        writer.putContent(property.getFile());
                        contentUrl = writer.getContentUrl();
                    }
                    if (contentUrl == null || contentUrl.length() == 0) {
                        throw new IllegalStateException("Content URL is empty for specified working copy content node!");
                    }
                    // add version history text to props
                    Map<String, Serializable> props = new HashMap<String, Serializable>(1, 1.0f);
                    props.put(Version.PROP_DESCRIPTION, property.getVersionNotes());
                    // set the flag for minor or major change
                    if (property.getMinorChange()) {
                        props.put(VersionModel.PROP_VERSION_TYPE, VersionType.MINOR);
                    } else {
                        props.put(VersionModel.PROP_VERSION_TYPE, VersionType.MAJOR);
                    }
                    // perform the checkin
                    property.getVersionOperationsService().checkin(node.getNodeRef(), props, contentUrl, property.getKeepCheckedOut());
                    return null;
                }
            };
            txnHelper.doInTransaction(callback);
            outcome = AlfrescoNavigationHandler.CLOSE_DIALOG_OUTCOME;
            if (property.isWorkflowAction() == false) {
                outcome = outcome + AlfrescoNavigationHandler.OUTCOME_SEPARATOR + "browse";
            }
            // clear action context
            property.setDocument(null);
            resetState();
        } catch (Throwable err) {
            Utils.addErrorMessage(Application.getMessage(FacesContext.getCurrentInstance(), MSG_ERROR_CHECKIN) + err.getMessage(), err);
            ReportedException.throwIfNecessary(err);
        }
    } else {
        logger.warn("WARNING: checkinFileOK called without a current Document!");
    }
    return outcome;
}
Also used : Serializable(java.io.Serializable) RetryingTransactionHelper(org.alfresco.repo.transaction.RetryingTransactionHelper) HashMap(java.util.HashMap) Node(org.alfresco.web.bean.repository.Node) ContentWriter(org.alfresco.service.cmr.repository.ContentWriter) ContentData(org.alfresco.service.cmr.repository.ContentData) RetryingTransactionCallback(org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback)

Example 14 with ContentData

use of org.alfresco.service.cmr.repository.ContentData in project acs-community-packaging by Alfresco.

the class UploadContentServlet method doPut.

/**
 * @see javax.servlet.http.HttpServlet#doPut(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
 */
protected void doPut(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    if (logger.isDebugEnabled() == true) {
        String queryString = req.getQueryString();
        logger.debug("Authenticating request to URL: " + req.getRequestURI() + ((queryString != null && queryString.length() > 0) ? ("?" + queryString) : ""));
    }
    AuthenticationStatus status = servletAuthenticate(req, res, false);
    if (status == AuthenticationStatus.Failure || status == AuthenticationStatus.Guest) {
        res.sendError(HttpServletResponse.SC_UNAUTHORIZED);
        return;
    }
    // Tokenise the URI
    String uri = req.getRequestURI();
    uri = uri.substring(req.getContextPath().length());
    StringTokenizer t = new StringTokenizer(uri, "/");
    int tokenCount = t.countTokens();
    // skip servlet name
    t.nextToken();
    // get or calculate the noderef and filename to download as
    NodeRef nodeRef = null;
    String filename = null;
    QName propertyQName = null;
    if (tokenCount == 2) {
        // filename is the only token
        filename = t.nextToken();
    } else if (tokenCount == 4 || tokenCount == 5) {
        // assume 'workspace' or other NodeRef based protocol for remaining URL
        // elements
        StoreRef storeRef = new StoreRef(t.nextToken(), t.nextToken());
        String id = t.nextToken();
        // build noderef from the appropriate URL elements
        nodeRef = new NodeRef(storeRef, id);
        if (tokenCount == 5) {
            // filename is last remaining token
            filename = t.nextToken();
        }
        // get qualified of the property to get content from - default to
        // ContentModel.PROP_CONTENT
        propertyQName = ContentModel.PROP_CONTENT;
        String property = req.getParameter(ARG_PROPERTY);
        if (property != null && property.length() != 0) {
            propertyQName = QName.createQName(property);
        }
    } else {
        logger.debug("Upload URL did not contain all required args: " + uri);
        res.sendError(HttpServletResponse.SC_EXPECTATION_FAILED);
        return;
    }
    // get the services we need to retrieve the content
    ServiceRegistry serviceRegistry = getServiceRegistry(getServletContext());
    ContentService contentService = serviceRegistry.getContentService();
    PermissionService permissionService = serviceRegistry.getPermissionService();
    MimetypeService mimetypeService = serviceRegistry.getMimetypeService();
    NodeService nodeService = serviceRegistry.getNodeService();
    InputStream is = req.getInputStream();
    BufferedInputStream inputStream = new BufferedInputStream(is);
    // Sort out the mimetype
    String mimetype = req.getParameter(ARG_MIMETYPE);
    if (mimetype == null || mimetype.length() == 0) {
        mimetype = MIMETYPE_OCTET_STREAM;
        if (filename != null) {
            MimetypeService mimetypeMap = serviceRegistry.getMimetypeService();
            int extIndex = filename.lastIndexOf('.');
            if (extIndex != -1) {
                String ext = filename.substring(extIndex + 1);
                mimetype = mimetypeService.getMimetype(ext);
            }
        }
    }
    // Get the encoding
    String encoding = req.getParameter(ARG_ENCODING);
    if (encoding == null || encoding.length() == 0) {
        // Get the encoding
        ContentCharsetFinder charsetFinder = mimetypeService.getContentCharsetFinder();
        Charset charset = charsetFinder.getCharset(inputStream, mimetype);
        encoding = charset.name();
    }
    // Get the locale
    Locale locale = I18NUtil.parseLocale(req.getParameter(ARG_LOCALE));
    if (locale == null) {
        locale = I18NUtil.getContentLocale();
        if (nodeRef != null) {
            ContentData contentData = (ContentData) nodeService.getProperty(nodeRef, propertyQName);
            if (contentData != null) {
                locale = contentData.getLocale();
            }
        }
    }
    if (logger.isDebugEnabled()) {
        if (nodeRef != null) {
            logger.debug("Found NodeRef: " + nodeRef.toString());
        }
        logger.debug("For property: " + propertyQName);
        logger.debug("File name: " + filename);
        logger.debug("Mimetype: " + mimetype);
        logger.debug("Encoding: " + encoding);
        logger.debug("Locale: " + locale);
    }
    // Check that the user has the permissions to write the content
    if (permissionService.hasPermission(nodeRef, PermissionService.WRITE_CONTENT) == AccessStatus.DENIED) {
        if (logger.isDebugEnabled() == true) {
            logger.debug("User does not have permissions to wrtie content for NodeRef: " + nodeRef.toString());
        }
        if (logger.isDebugEnabled()) {
            logger.debug("Returning 403 Forbidden error...");
        }
        res.sendError(HttpServletResponse.SC_FORBIDDEN);
        return;
    }
    // Try and get the content writer
    ContentWriter writer = contentService.getWriter(nodeRef, propertyQName, true);
    if (writer == null) {
        if (logger.isDebugEnabled() == true) {
            logger.debug("Content writer cannot be obtained for NodeRef: " + nodeRef.toString());
        }
        res.sendError(HttpServletResponse.SC_EXPECTATION_FAILED);
        return;
    }
    // Set the mimetype, encoding and locale
    writer.setMimetype(mimetype);
    writer.setEncoding(encoding);
    if (locale != null) {
        writer.setLocale(locale);
    }
    // Stream the content into the repository
    writer.putContent(inputStream);
    if (logger.isDebugEnabled() == true) {
        logger.debug("Content details: " + writer.getContentData().toString());
    }
    // Set return status
    res.getWriter().write(writer.getContentData().toString());
    res.flushBuffer();
    if (logger.isDebugEnabled() == true) {
        logger.debug("UploadContentServlet done");
    }
}
Also used : Locale(java.util.Locale) StoreRef(org.alfresco.service.cmr.repository.StoreRef) QName(org.alfresco.service.namespace.QName) BufferedInputStream(java.io.BufferedInputStream) InputStream(java.io.InputStream) NodeService(org.alfresco.service.cmr.repository.NodeService) ContentCharsetFinder(org.alfresco.repo.content.encoding.ContentCharsetFinder) Charset(java.nio.charset.Charset) ContentService(org.alfresco.service.cmr.repository.ContentService) PermissionService(org.alfresco.service.cmr.security.PermissionService) NodeRef(org.alfresco.service.cmr.repository.NodeRef) StringTokenizer(java.util.StringTokenizer) ContentWriter(org.alfresco.service.cmr.repository.ContentWriter) ContentData(org.alfresco.service.cmr.repository.ContentData) BufferedInputStream(java.io.BufferedInputStream) MimetypeService(org.alfresco.service.cmr.repository.MimetypeService) ServiceRegistry(org.alfresco.service.ServiceRegistry)

Example 15 with ContentData

use of org.alfresco.service.cmr.repository.ContentData in project acs-community-packaging by Alfresco.

the class EditContentPropertiesDialog method finishImpl.

@Override
protected String finishImpl(FacesContext context, String outcome) throws Exception {
    NodeRef nodeRef = this.editableNode.getNodeRef();
    Map<String, Object> editedProps = this.editableNode.getProperties();
    // get the name and move the node as necessary
    String name = (String) editedProps.get(ContentModel.PROP_NAME);
    if (name != null) {
        getFileFolderService().rename(nodeRef, name);
    }
    // we need to put all the properties from the editable bag back into
    // the format expected by the repository
    Map<QName, Serializable> repoProps = this.getNodeService().getProperties(nodeRef);
    // Extract and deal with the special mimetype property for ContentData
    String mimetype = (String) editedProps.get(TEMP_PROP_MIMETYPE);
    if (mimetype != null) {
        // remove temporary prop from list so it isn't saved with the others
        editedProps.remove(TEMP_PROP_MIMETYPE);
        ContentData contentData = (ContentData) editedProps.get(ContentModel.PROP_CONTENT);
        if (contentData != null) {
            contentData = ContentData.setMimetype(contentData, mimetype);
            editedProps.put(ContentModel.PROP_CONTENT.toString(), contentData);
        }
    }
    // Extract and deal with the special encoding property for ContentData
    String encoding = (String) editedProps.get(TEMP_PROP_ENCODING);
    if (encoding != null) {
        // remove temporary prop from list so it isn't saved with the others
        editedProps.remove(TEMP_PROP_ENCODING);
        ContentData contentData = (ContentData) editedProps.get(ContentModel.PROP_CONTENT);
        if (contentData != null) {
            contentData = ContentData.setEncoding(contentData, encoding);
            editedProps.put(ContentModel.PROP_CONTENT.toString(), contentData);
        }
    }
    // add the "author" aspect if required, properties will get set below
    if (this.getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_AUTHOR) == false) {
        this.getNodeService().addAspect(nodeRef, ContentModel.ASPECT_AUTHOR, null);
    }
    // add the "titled" aspect if required, properties will get set below
    if (this.getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_TITLED) == false) {
        getNodeService().addAspect(nodeRef, ContentModel.ASPECT_TITLED, null);
    }
    // add the remaining properties
    Iterator<String> iterProps = editedProps.keySet().iterator();
    while (iterProps.hasNext()) {
        String propName = iterProps.next();
        QName qname = QName.createQName(propName);
        // make sure the property is represented correctly
        Serializable propValue = (Serializable) editedProps.get(propName);
        // check for empty strings when using number types, set to null in this case
        if (propValue instanceof String) {
            PropertyDefinition propDef = this.getDictionaryService().getProperty(qname);
            if (((String) propValue).length() == 0) {
                if (propDef != null) {
                    if (propDef.getDataType().getName().equals(DataTypeDefinition.DOUBLE) || propDef.getDataType().getName().equals(DataTypeDefinition.FLOAT) || propDef.getDataType().getName().equals(DataTypeDefinition.INT) || propDef.getDataType().getName().equals(DataTypeDefinition.LONG)) {
                        propValue = null;
                    }
                }
            } else // handle locale strings to Locale objects
            if (propDef != null && propDef.getDataType().getName().equals(DataTypeDefinition.LOCALE)) {
                propValue = I18NUtil.parseLocale((String) propValue);
            }
        }
        repoProps.put(qname, propValue);
    }
    // send the properties back to the repository
    this.getNodeService().setProperties(nodeRef, repoProps);
    // we also need to persist any association changes that may have been made
    // add any associations added in the UI
    Map<String, Map<String, AssociationRef>> addedAssocs = this.editableNode.getAddedAssociations();
    for (Map<String, AssociationRef> typedAssoc : addedAssocs.values()) {
        for (AssociationRef assoc : typedAssoc.values()) {
            this.getNodeService().createAssociation(assoc.getSourceRef(), assoc.getTargetRef(), assoc.getTypeQName());
        }
    }
    // remove any association removed in the UI
    Map<String, Map<String, AssociationRef>> removedAssocs = this.editableNode.getRemovedAssociations();
    for (Map<String, AssociationRef> typedAssoc : removedAssocs.values()) {
        for (AssociationRef assoc : typedAssoc.values()) {
            this.getNodeService().removeAssociation(assoc.getSourceRef(), assoc.getTargetRef(), assoc.getTypeQName());
        }
    }
    // add any child associations added in the UI
    Map<String, Map<String, ChildAssociationRef>> addedChildAssocs = this.editableNode.getAddedChildAssociations();
    for (Map<String, ChildAssociationRef> typedAssoc : addedChildAssocs.values()) {
        for (ChildAssociationRef assoc : typedAssoc.values()) {
            this.getNodeService().addChild(assoc.getParentRef(), assoc.getChildRef(), assoc.getTypeQName(), assoc.getTypeQName());
        }
    }
    // remove any child association removed in the UI
    Map<String, Map<String, ChildAssociationRef>> removedChildAssocs = this.editableNode.getRemovedChildAssociations();
    for (Map<String, ChildAssociationRef> typedAssoc : removedChildAssocs.values()) {
        for (ChildAssociationRef assoc : typedAssoc.values()) {
            this.getNodeService().removeChild(assoc.getParentRef(), assoc.getChildRef());
        }
    }
    return outcome;
}
Also used : Serializable(java.io.Serializable) QName(org.alfresco.service.namespace.QName) ChildAssociationRef(org.alfresco.service.cmr.repository.ChildAssociationRef) PropertyDefinition(org.alfresco.service.cmr.dictionary.PropertyDefinition) AssociationRef(org.alfresco.service.cmr.repository.AssociationRef) ChildAssociationRef(org.alfresco.service.cmr.repository.ChildAssociationRef) NodeRef(org.alfresco.service.cmr.repository.NodeRef) ContentData(org.alfresco.service.cmr.repository.ContentData) Map(java.util.Map)

Aggregations

ContentData (org.alfresco.service.cmr.repository.ContentData)29 Serializable (java.io.Serializable)14 QName (org.alfresco.service.namespace.QName)14 NodeRef (org.alfresco.service.cmr.repository.NodeRef)10 Date (java.util.Date)5 InvalidArgumentException (org.alfresco.rest.framework.core.exceptions.InvalidArgumentException)5 HashMap (java.util.HashMap)4 InputStream (java.io.InputStream)3 Map (java.util.Map)3 ContentInfo (org.alfresco.rest.api.model.ContentInfo)3 ConstraintViolatedException (org.alfresco.rest.framework.core.exceptions.ConstraintViolatedException)3 DisabledServiceException (org.alfresco.rest.framework.core.exceptions.DisabledServiceException)3 FileExistsException (org.alfresco.service.cmr.model.FileExistsException)3 ChildAssociationRef (org.alfresco.service.cmr.repository.ChildAssociationRef)3 ContentWriter (org.alfresco.service.cmr.repository.ContentWriter)3 InvalidNodeRefException (org.alfresco.service.cmr.repository.InvalidNodeRefException)3 Node (org.alfresco.web.bean.repository.Node)3 SessionUser (org.alfresco.repo.SessionUser)2 AccessDeniedException (org.alfresco.repo.security.permissions.AccessDeniedException)2 RetryingTransactionCallback (org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback)2