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.
}
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();
}
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);
}
}
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();
}
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);
}
Aggregations