Search in sources :

Example 91 with NodeRef

use of org.alfresco.service.cmr.repository.NodeRef in project alfresco-remote-api by Alfresco.

the class BlogServiceTest method testCreateDraftPostWithTagsAndComment.

/**
 * @since 4.0
 */
@Test
@Category({ LuceneTests.class, RedundantTests.class })
public void testCreateDraftPostWithTagsAndComment() throws Exception {
    String[] tags = new String[] { "foo", "bar" };
    String title = "test";
    String content = "test";
    JSONObject item = createPost(title, content, tags, true, 200);
    // check that the values
    assertEquals(title, item.get("title"));
    assertEquals(content, item.get("content"));
    assertEquals(true, item.get("isDraft"));
    JSONArray reportedTags = (JSONArray) item.get("tags");
    assertEquals("Tags size was wrong.", 2, reportedTags.length());
    List<String> recoveredTagsList = Arrays.asList(new String[] { reportedTags.getString(0), reportedTags.getString(1) });
    assertEquals("Tags were wrong.", Arrays.asList(tags), recoveredTagsList);
    // comment on the blog post.
    NodeRef blogPostNode = new NodeRef(item.getString("nodeRef"));
    // Currently (mid-Swift dev) there is no Java CommentService, so we have to post a comment via the REST API.
    String commentsPostUrl = "/api/node/" + blogPostNode.getStoreRef().getProtocol() + "/" + blogPostNode.getStoreRef().getIdentifier() + "/" + blogPostNode.getId() + "/comments";
    String jsonToPost = new JSONStringer().object().key("title").value("Commented blog title").key("content").value("Some content.").endObject().toString();
    Response response = sendRequest(new PostRequest(commentsPostUrl, jsonToPost, "application/json"), 200);
    // check that other user doesn't have access to the draft
    this.authenticationComponent.setCurrentUser(USER_TWO);
    getPost(item.getString("name"), 404);
    this.authenticationComponent.setCurrentUser(USER_ONE);
    // Now we'll GET my-drafts to ensure that the post is there.
    response = sendRequest(new GetRequest(URL_MY_DRAFT_BLOG_POSTS), 200);
    JSONObject result = new JSONObject(response.getContentAsString());
    // Ensure it reports the tag correctly on GET.
    JSONArray items = result.getJSONArray("items");
    JSONArray tagsArray = items.getJSONObject(0).getJSONArray("tags");
    assertEquals("Wrong number of tags", 2, tagsArray.length());
    assertEquals("Tag wrong", tags[0], tagsArray.getString(0));
    assertEquals("Tag wrong", tags[1], tagsArray.getString(1));
    // Ensure the comment count is accurate
    assertEquals("Wrong comment count", 1, items.getJSONObject(0).getInt("commentCount"));
    // and that there is content at the commentsURL.
    String commentsUrl = "/api" + items.getJSONObject(0).getString("commentsUrl");
    response = sendRequest(new GetRequest(commentsUrl), 200);
    // Now get blog-post by tag.
    // 1. No such tag
    response = sendRequest(new GetRequest(URL_BLOG_POSTS + "?tag=NOSUCHTAG"), 200);
    result = new JSONObject(response.getContentAsString());
    assertEquals(0, result.getInt("total"));
    // tag created above
    response = sendRequest(new GetRequest(URL_BLOG_POSTS + "?tag=foo"), 200);
    result = new JSONObject(response.getContentAsString());
    assertEquals(1, result.getInt("total"));
// TODO More assertions on recovered node.
}
Also used : Response(org.springframework.extensions.webscripts.TestWebScriptServer.Response) NodeRef(org.alfresco.service.cmr.repository.NodeRef) PostRequest(org.springframework.extensions.webscripts.TestWebScriptServer.PostRequest) JSONObject(org.json.JSONObject) GetRequest(org.springframework.extensions.webscripts.TestWebScriptServer.GetRequest) JSONArray(org.json.JSONArray) JSONStringer(org.json.JSONStringer) Category(org.junit.experimental.categories.Category) BaseWebScriptTest(org.alfresco.repo.web.scripts.BaseWebScriptTest) Test(org.junit.Test)

Example 92 with NodeRef

use of org.alfresco.service.cmr.repository.NodeRef in project alfresco-remote-api by Alfresco.

the class CommentsApiTest method setUp.

@Override
protected void setUp() throws Exception {
    super.setUp();
    ApplicationContext appContext = getServer().getApplicationContext();
    fileFolderService = (FileFolderService) appContext.getBean("fileFolderService");
    transactionService = (TransactionService) appContext.getBean("transactionService");
    searchService = (SearchService) appContext.getBean("SearchService");
    nodeService = (NodeService) appContext.getBean("nodeService");
    namespaceService = (NamespaceService) appContext.getBean("namespaceService");
    versionService = (VersionService) appContext.getBean("versionService");
    personService = (PersonService) getServer().getApplicationContext().getBean("PersonService");
    authenticationService = (MutableAuthenticationService) getServer().getApplicationContext().getBean("AuthenticationService");
    authenticationComponent = (AuthenticationComponent) getServer().getApplicationContext().getBean("authenticationComponent");
    permissionService = (PermissionServiceSPI) getServer().getApplicationContext().getBean("permissionService");
    permissionModelDAO = (ModelDAO) getServer().getApplicationContext().getBean("permissionsModelDAO");
    siteService = (SiteService) getServer().getApplicationContext().getBean("SiteService");
    personService = (PersonService) getServer().getApplicationContext().getBean("PersonService");
    nodeArchiveService = (NodeArchiveService) getServer().getApplicationContext().getBean("nodeArchiveService");
    activityService = (ActivityService) getServer().getApplicationContext().getBean("activityService");
    ChildApplicationContextFactory activitiesFeed = (ChildApplicationContextFactory) getServer().getApplicationContext().getBean("ActivitiesFeed");
    ApplicationContext activitiesFeedCtx = activitiesFeed.getApplicationContext();
    feedGenerator = (FeedGenerator) activitiesFeedCtx.getBean("feedGenerator");
    postLookup = (PostLookup) activitiesFeedCtx.getBean("postLookup");
    AuthenticationUtil.setFullyAuthenticatedUser(AuthenticationUtil.getAdminUserName());
    txn = transactionService.getUserTransaction();
    txn.begin();
    // Get Company Home
    rootNodeRef = nodeService.getRootNode(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE);
    List<NodeRef> results = searchService.selectNodes(rootNodeRef, "/app:company_home", null, namespaceService, false);
    if (results.size() == 0) {
        throw new AlfrescoRuntimeException("Can't find /app:company_home");
    }
    companyHomeNodeRef = results.get(0);
    // Get Shared
    results = searchService.selectNodes(rootNodeRef, "/app:company_home/app:shared", null, namespaceService, false);
    if (results.size() == 0) {
        throw new AlfrescoRuntimeException("Can't find /app:company_home/app:shared");
    }
    sharedHomeNodeRef = results.get(0);
    results = searchService.selectNodes(rootNodeRef, "/app:company_home/cm:Commenty", null, namespaceService, false);
    if (results.size() > 0) {
        fileFolderService.delete(results.get(0));
    }
    nodeRef = fileFolderService.create(companyHomeNodeRef, "Commenty", ContentModel.TYPE_CONTENT).getNodeRef();
    versionService.ensureVersioningEnabled(nodeRef, null);
    nodeService.setProperty(nodeRef, ContentModel.PROP_AUTO_VERSION_PROPS, true);
    createUser(USER2);
    createUser(USER_TEST);
    txn.commit();
    AuthenticationUtil.clearCurrentSecurityContext();
    // MNT-12082
    // Authenticate as admin
    AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser();
    // Create test site
    // - only create the site if it doesn't already exist
    SiteInfo siteInfo = siteService.getSite(SITE_SHORT_NAME);
    if (siteInfo == null) {
        siteInfo = siteService.createSite("SomeTestSite", SITE_SHORT_NAME, "SiteTitle", "SiteDescription", SiteVisibility.PUBLIC);
    }
    NodeRef docLibContainer = siteService.getContainer(SITE_SHORT_NAME, DOCLIB_CONTAINER);
    if (docLibContainer == null) {
        siteService.createContainer(SITE_SHORT_NAME, DOCLIB_CONTAINER, ContentModel.TYPE_FOLDER, null);
    }
    txn = transactionService.getUserTransaction();
    txn.begin();
    // Create users
    createUser(USER_ONE, SiteModel.SITE_CONSUMER);
    createUser(USER_TWO, SiteModel.SITE_CONTRIBUTOR);
    createUser(USER_THREE, SiteModel.SITE_COLLABORATOR);
    createUser(USER_FOUR, SiteModel.SITE_COLLABORATOR);
    // Create site page
    sitePage = nodeService.createNode(siteInfo.getNodeRef(), ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_PREFIX, "test"), ContentModel.TYPE_CONTENT).getChildRef();
    txn.commit();
}
Also used : NodeRef(org.alfresco.service.cmr.repository.NodeRef) SiteInfo(org.alfresco.service.cmr.site.SiteInfo) ApplicationContext(org.springframework.context.ApplicationContext) AlfrescoRuntimeException(org.alfresco.error.AlfrescoRuntimeException) ChildApplicationContextFactory(org.alfresco.repo.management.subsystems.ChildApplicationContextFactory)

Example 93 with NodeRef

use of org.alfresco.service.cmr.repository.NodeRef in project alfresco-remote-api by Alfresco.

the class PutMethod method postActivity.

/**
 * Create an activity post.
 *
 * @throws WebDAVServerException
 */
protected void postActivity() throws WebDAVServerException {
    WebDavService davService = getDAVHelper().getServiceRegistry().getWebDavService();
    if (!davService.activitiesEnabled()) {
        // Don't post activities if this behaviour is disabled.
        return;
    }
    String path = getPath();
    String siteId = getSiteId();
    String tenantDomain = getTenantDomain();
    if (siteId.equals(WebDAVHelper.EMPTY_SITE_ID)) {
        // There is not enough information to publish site activity.
        return;
    }
    FileInfo contentNodeInfo = null;
    try {
        contentNodeInfo = getNodeForPath(getRootNodeRef(), path);
        NodeRef nodeRef = contentNodeInfo.getNodeRef();
        // Don't post activity data for hidden files, resource forks etc.
        if (!getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_HIDDEN)) {
            if (isCreated()) {
                // file added
                activityPoster.postFileFolderAdded(siteId, tenantDomain, null, contentNodeInfo);
            } else {
                // file updated
                activityPoster.postFileFolderUpdated(siteId, tenantDomain, contentNodeInfo);
            }
        }
    } catch (FileNotFoundException error) {
        throw new WebDAVServerException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
    }
}
Also used : WebDavService(org.alfresco.service.cmr.webdav.WebDavService) NodeRef(org.alfresco.service.cmr.repository.NodeRef) FileInfo(org.alfresco.service.cmr.model.FileInfo) FileNotFoundException(org.alfresco.service.cmr.model.FileNotFoundException)

Example 94 with NodeRef

use of org.alfresco.service.cmr.repository.NodeRef in project alfresco-remote-api by Alfresco.

the class PutMethod method executeImpl.

/**
 * Execute the WebDAV request
 *
 * @exception WebDAVServerException
 */
protected void executeImpl() throws WebDAVServerException, Exception {
    if (logger.isDebugEnabled()) {
        String path = getPath();
        String userName = getDAVHelper().getAuthenticationService().getCurrentUserName();
        logger.debug("Put node: \n" + "     user: " + userName + "\n" + "     path: " + path + "\n" + "noContent: " + noContent);
    }
    FileFolderService fileFolderService = getFileFolderService();
    // Get the status for the request path
    LockInfo nodeLockInfo = null;
    try {
        contentNodeInfo = getNodeForPath(getRootNodeRef(), getPath());
        // make sure that we are not trying to use a folder
        if (contentNodeInfo.isFolder()) {
            throw new WebDAVServerException(HttpServletResponse.SC_BAD_REQUEST);
        }
        nodeLockInfo = checkNode(contentNodeInfo);
        // 'Unhide' nodes hidden by us and behave as though we created them
        NodeRef contentNodeRef = contentNodeInfo.getNodeRef();
        if (fileFolderService.isHidden(contentNodeRef) && !getDAVHelper().isRenameShuffle(getPath())) {
            fileFolderService.setHidden(contentNodeRef, false);
            created = true;
        }
    } catch (FileNotFoundException e) {
        // the file doesn't exist - create it
        String[] paths = getDAVHelper().splitPath(getPath());
        try {
            FileInfo parentNodeInfo = getNodeForPath(getRootNodeRef(), paths[0]);
            // create file
            contentNodeInfo = getDAVHelper().createFile(parentNodeInfo, paths[1]);
            created = true;
        } catch (FileNotFoundException ee) {
            // bad path
            throw new WebDAVServerException(HttpServletResponse.SC_CONFLICT);
        } catch (FileExistsException ee) {
            // ALF-7079 fix, retry: it looks like concurrent access (file not found but file exists)
            throw new ConcurrencyFailureException("Concurrent access was detected.", ee);
        }
    }
    String userName = getDAVHelper().getAuthenticationService().getCurrentUserName();
    LockInfo lockInfo = getDAVLockService().getLockInfo(contentNodeInfo.getNodeRef());
    if (lockInfo != null) {
        if (lockInfo.isLocked() && !lockInfo.getOwner().equals(userName)) {
            if (logger.isDebugEnabled()) {
                String path = getPath();
                String owner = lockInfo.getOwner();
                logger.debug("Node locked: path=[" + path + "], owner=[" + owner + "], current user=[" + userName + "]");
            }
            // Indicate that the resource is locked
            throw new WebDAVServerException(WebDAV.WEBDAV_SC_LOCKED);
        }
    }
    // ALF-16808: We disable the versionable aspect if we are overwriting
    // empty content because it's probably part of a compound operation to
    // create a new single version
    boolean disabledVersioning = false;
    try {
        // Disable versioning if we are overwriting an empty file with content
        NodeRef nodeRef = contentNodeInfo.getNodeRef();
        ContentData contentData = (ContentData) getNodeService().getProperty(nodeRef, ContentModel.PROP_CONTENT);
        if ((contentData == null || contentData.getSize() == 0) && getNodeService().hasAspect(nodeRef, ContentModel.ASPECT_VERSIONABLE)) {
            getDAVHelper().getPolicyBehaviourFilter().disableBehaviour(nodeRef, ContentModel.ASPECT_VERSIONABLE);
            disabledVersioning = true;
        }
        // Access the content
        ContentWriter writer = fileFolderService.getWriter(contentNodeInfo.getNodeRef());
        // set content properties
        writer.guessMimetype(contentNodeInfo.getName());
        writer.guessEncoding();
        // Get the input stream from the request data
        InputStream is = m_request.getInputStream();
        // Write the new data to the content node
        writer.putContent(is);
        // - the node does not have any content (zero length binaries included)
        if (nodeLockInfo != null && nodeLockInfo.isExclusive() && !(ContentData.hasContent(contentData) && contentData.getSize() > 0)) {
            getNodeService().addAspect(contentNodeInfo.getNodeRef(), ContentModel.ASPECT_NO_CONTENT, null);
        }
        // Ask for the document metadata to be extracted
        Action extract = getActionService().createAction(ContentMetadataExtracter.EXECUTOR_NAME);
        if (extract != null) {
            extract.setExecuteAsynchronously(false);
            getActionService().executeAction(extract, contentNodeInfo.getNodeRef());
        }
        // from the original specified in the request, update it.
        if (m_strContentType == null || !m_strContentType.equals(writer.getMimetype())) {
            String oldMimeType = m_strContentType;
            m_strContentType = writer.getMimetype();
            if (logger.isDebugEnabled()) {
                logger.debug("Mimetype originally specified as " + oldMimeType + ", now guessed to be " + m_strContentType);
            }
        }
        // Record the uploaded file's size
        fileSize = writer.getSize();
        // Set the response status, depending if the node existed or not
        m_response.setStatus(created ? HttpServletResponse.SC_CREATED : HttpServletResponse.SC_NO_CONTENT);
    } catch (AccessDeniedException e) {
        throw new WebDAVServerException(HttpServletResponse.SC_FORBIDDEN, e);
    } catch (Throwable e) {
        // we are about to give up
        if (noContent && RetryingTransactionHelper.extractRetryCause(e) == null) {
            // remove the 0 bytes content if save operation failed or was cancelled
            final NodeRef nodeRef = contentNodeInfo.getNodeRef();
            getTransactionService().getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<String>() {

                public String execute() throws Throwable {
                    getNodeService().deleteNode(nodeRef);
                    if (logger.isDebugEnabled()) {
                        logger.debug("Put failed. DELETE  " + getPath());
                    }
                    return null;
                }
            }, false, false);
        }
        throw new WebDAVServerException(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
    } finally {
        if (disabledVersioning) {
            getDAVHelper().getPolicyBehaviourFilter().enableBehaviour(contentNodeInfo.getNodeRef(), ContentModel.ASPECT_VERSIONABLE);
        }
    }
    postActivity();
}
Also used : Action(org.alfresco.service.cmr.action.Action) AccessDeniedException(org.alfresco.repo.security.permissions.AccessDeniedException) InputStream(java.io.InputStream) FileNotFoundException(org.alfresco.service.cmr.model.FileNotFoundException) FileFolderService(org.alfresco.service.cmr.model.FileFolderService) NodeRef(org.alfresco.service.cmr.repository.NodeRef) ContentWriter(org.alfresco.service.cmr.repository.ContentWriter) ContentData(org.alfresco.service.cmr.repository.ContentData) FileInfo(org.alfresco.service.cmr.model.FileInfo) RetryingTransactionCallback(org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback) ConcurrencyFailureException(org.springframework.dao.ConcurrencyFailureException) FileExistsException(org.alfresco.service.cmr.model.FileExistsException)

Example 95 with NodeRef

use of org.alfresco.service.cmr.repository.NodeRef in project alfresco-remote-api by Alfresco.

the class PutMethod method parseRequestBody.

/**
 * Clears the aspect added by a LOCK request for a new file, so
 * that the Timer started by the LOCK request will not remove the
 * node now that the PUT request has been received. This is needed
 * for large content.
 *
 * @exception WebDAVServerException
 */
protected void parseRequestBody() throws WebDAVServerException {
    // Nothing is done with the body by this method. The body contains
    // the content it will be dealt with later.
    // This method is called ONCE just before the FIRST call to executeImpl,
    // which is in a retrying transaction so may be called many times.
    // Although this method is called just before the first executeImpl,
    // it is possible that the Thread could be interrupted before the first call
    // or between calls. However the chances are low and the consequence
    // (leaving a zero byte file) is minor.
    noContent = getTransactionService().getRetryingTransactionHelper().doInTransaction(new RetryingTransactionCallback<Boolean>() {

        public Boolean execute() throws Throwable {
            FileInfo contentNodeInfo = null;
            try {
                contentNodeInfo = getNodeForPath(getRootNodeRef(), getPath());
                checkNode(contentNodeInfo);
                final NodeRef nodeRef = contentNodeInfo.getNodeRef();
                if (getNodeService().hasAspect(contentNodeInfo.getNodeRef(), ContentModel.ASPECT_WEBDAV_NO_CONTENT)) {
                    getNodeService().removeAspect(nodeRef, ContentModel.ASPECT_WEBDAV_NO_CONTENT);
                    if (logger.isDebugEnabled()) {
                        String path = getPath();
                        logger.debug("Put Timer DISABLE " + path);
                    }
                    return Boolean.TRUE;
                }
            } catch (FileNotFoundException e) {
            // Does not exist, so there will be no aspect.
            }
            return Boolean.FALSE;
        }
    }, false, true);
}
Also used : NodeRef(org.alfresco.service.cmr.repository.NodeRef) FileInfo(org.alfresco.service.cmr.model.FileInfo) RetryingTransactionCallback(org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback) FileNotFoundException(org.alfresco.service.cmr.model.FileNotFoundException)

Aggregations

NodeRef (org.alfresco.service.cmr.repository.NodeRef)1239 HashMap (java.util.HashMap)244 QName (org.alfresco.service.namespace.QName)242 ChildAssociationRef (org.alfresco.service.cmr.repository.ChildAssociationRef)209 Test (org.junit.Test)195 ArrayList (java.util.ArrayList)159 Serializable (java.io.Serializable)136 AlfrescoRuntimeException (org.alfresco.error.AlfrescoRuntimeException)104 BaseUnitTest (org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest)101 FileInfo (org.alfresco.service.cmr.model.FileInfo)82 Map (java.util.Map)81 Node (org.alfresco.web.bean.repository.Node)81 JSONObject (org.json.JSONObject)80 WebScriptException (org.springframework.extensions.webscripts.WebScriptException)74 FacesContext (javax.faces.context.FacesContext)61 InvalidNodeRefException (org.alfresco.service.cmr.repository.InvalidNodeRefException)59 List (java.util.List)58 IOException (java.io.IOException)55 ContentWriter (org.alfresco.service.cmr.repository.ContentWriter)52 Date (java.util.Date)51