Tagging Service: Add, remove and get tags added to JS ScriptNode

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@9639 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2008-07-03 16:20:38 +00:00
parent 4fb860407c
commit c00a148e33
8 changed files with 255 additions and 29 deletions

View File

@@ -2023,6 +2023,72 @@ public class ScriptNode implements Serializable, Scopeable
return (ScriptThumbnail[])result.toArray(new ScriptThumbnail[result.size()]);
}
// ------------------------------------------------------------------------------
// Tag methods
/**
* Adds a tag to the node
*
* @param tag tag name
*/
public void addTag(String tag)
{
this.services.getTaggingService().addTag(this.nodeRef, tag);
}
/**
* Removes a tag from the node
*
* @param tag tag name
*/
public void removeTag(String tag)
{
this.services.getTaggingService().removeTag(this.nodeRef, tag);
}
/**
* Get all the tags applied to this node
*
* @return String[] array containing all the tag applied to this node
*/
public String[] getTags()
{
List<String> tags = this.services.getTaggingService().getTags(this.nodeRef);
return (String[])tags.toArray(new String[tags.size()]);
}
/**
* Sets whether this node is a tag scope or not
*
* @param value true if this node is a tag scope, false otherwise
*/
public void setIsTagScope(boolean value)
{
boolean currentValue = this.services.getTaggingService().isTagScope(this.nodeRef);
if (currentValue != value)
{
if (value == true)
{
// Add the tag scope
this.services.getTaggingService().addTagScope(this.nodeRef);
}
else
{
// Remove the tag scope
this.services.getTaggingService().removeTagScope(this.nodeRef);
}
}
}
/**
* Gets whether this node is a tag scope
*
* @return boolean true if this node is a tag scope, false otherwise
*/
public boolean getIsTagScope()
{
return this.services.getTaggingService().isTagScope(this.nodeRef);
}
// ------------------------------------------------------------------------------
// Helper methods

View File

@@ -413,7 +413,7 @@ public class LuceneCategoryServiceImpl implements CategoryService
LuceneIndexerAndSearcher lias = (LuceneIndexerAndSearcher) indexerAndSearcher;
String field = "@" + catProperty;
SearchService searchService = lias.getSearcher(storeRef, true);
SearchService searchService = lias.getSearcher(storeRef, false);
if (searchService instanceof LuceneSearcher)
{
LuceneSearcher luceneSearcher = (LuceneSearcher)searchService;

View File

@@ -57,6 +57,7 @@ import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.tagging.TaggingService;
import org.alfresco.service.cmr.thumbnail.ThumbnailService;
import org.alfresco.service.cmr.version.VersionService;
import org.alfresco.service.cmr.view.ExporterService;
@@ -433,4 +434,12 @@ public class ServiceDescriptorRegistry
{
return (ThumbnailService)getService(THUMBNAIL_SERVICE);
}
/**
* @see org.alfresco.service.ServiceRegistry#getTaggingService()
*/
public TaggingService getTaggingService()
{
return (TaggingService)getService(TAGGING_SERVICE);
}
}

View File

@@ -152,6 +152,21 @@ public class TaggingServiceImpl implements TaggingService
}
}
/**
* @see org.alfresco.service.cmr.tagging.TaggingService#deleteTag(org.alfresco.service.cmr.repository.StoreRef, java.lang.String)
*/
public void deleteTag(StoreRef storeRef, String tag)
{
// Lower the case of the tag
tag = tag.toLowerCase();
NodeRef tagNodeRef = getTagNodeRef(storeRef, tag);
if (tagNodeRef != null)
{
this.categoryService.deleteCategory(tagNodeRef);
}
}
/**
* @see org.alfresco.service.cmr.tagging.TaggingService#getTags()
*/
@@ -167,6 +182,15 @@ public class TaggingServiceImpl implements TaggingService
return result;
}
/**
* @see org.alfresco.service.cmr.tagging.TaggingService#getTags(org.alfresco.service.cmr.repository.StoreRef, java.lang.String)
*/
public List<String> getTags(StoreRef storeRef, String filter)
{
// TODO
return null;
}
/**
* @see org.alfresco.service.cmr.tagging.TaggingService#addTag(org.alfresco.service.cmr.repository.NodeRef, java.lang.String)
*/
@@ -299,6 +323,14 @@ public class TaggingServiceImpl implements TaggingService
return result;
}
/**
* @see org.alfresco.service.cmr.tagging.TaggingService#isTagScope(org.alfresco.service.cmr.repository.NodeRef)
*/
public boolean isTagScope(NodeRef nodeRef)
{
return this.nodeService.hasAspect(nodeRef, ContentModel.ASPECT_TAGSCOPE);
}
/**
* @see org.alfresco.service.cmr.tagging.TaggingService#addTagScope(org.alfresco.service.cmr.repository.NodeRef)
*/
@@ -421,26 +453,33 @@ public class TaggingServiceImpl implements TaggingService
// Lower the case of the tag
tag = tag.toLowerCase();
//
// "+PATH:\"/cm:taggable/cm:" + ISOed(tag) + "/member\""
// TODO
return null;
}
/**
* @see org.alfresco.service.cmr.tagging.TaggingService#findTaggedNodes(java.lang.String, org.alfresco.service.cmr.tagging.TagScope)
* @see org.alfresco.service.cmr.tagging.TaggingService#findTaggedNodes(java.lang.String, org.alfresco.service.cmr.repository.NodeRef)
*/
public List<NodeRef> findTaggedNodes(String tag, TagScope tagScope)
public List<NodeRef> findTaggedNodes(String tag, NodeRef nodeRef)
{
// Lower the case of the tag
tag = tag.toLowerCase();
//
// "+PATH:\"/cm:taggable/cm:" + ISOed(tag) + "/member\" +PATH:\"" + pathOfTheNode + "//*\""
// TODO
return null;
}
/**
* Helper method that takes an input stream and converts it into a list of tag details
*
* @param is
* @return
* @param is input stream
* @return List<TagDetails> list of tag details
*/
/*package*/ static List<TagDetails> readTagDetails(InputStream is)
{
@@ -460,7 +499,6 @@ public class TaggingServiceImpl implements TaggingService
}
catch (IOException exception)
{
throw new AlfrescoRuntimeException("Unable to read tag details", exception);
}
@@ -468,9 +506,10 @@ public class TaggingServiceImpl implements TaggingService
}
/**
* Helper method to convert a list of tag details into a string.
*
* @param tagDetails
* @param os
* @param tagDetails list of tag details
* @return String string of tag details
*/
/*package*/ static String tagDetailsToString(List<TagDetails> tagDetails)
{

View File

@@ -32,11 +32,14 @@ import java.util.Map;
import javax.transaction.UserTransaction;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.jscript.ClasspathScriptLocation;
import org.alfresco.repo.security.authentication.AuthenticationComponent;
import org.alfresco.service.cmr.action.ActionService;
import org.alfresco.service.cmr.repository.ContentService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.ScriptLocation;
import org.alfresco.service.cmr.repository.ScriptService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.security.AuthenticationService;
import org.alfresco.service.cmr.tagging.TagDetails;
@@ -56,6 +59,7 @@ public class TaggingServiceImplTest extends BaseAlfrescoSpringTest
{
/** Services */
private TaggingService taggingService;
private ScriptService scriptService;
private static StoreRef storeRef;
private static NodeRef rootNode;
@@ -85,6 +89,7 @@ public class TaggingServiceImplTest extends BaseAlfrescoSpringTest
this.authenticationService = (AuthenticationService) this.applicationContext.getBean("authenticationService");
this.actionService = (ActionService)this.applicationContext.getBean("actionService");
this.transactionService = (TransactionService)this.applicationContext.getBean("transactionComponent");
this.scriptService = (ScriptService)this.applicationContext.getBean("scriptService");
if (init == false)
{
@@ -196,6 +201,27 @@ public class TaggingServiceImplTest extends BaseAlfrescoSpringTest
assertTrue(this.taggingService.isTag(TaggingServiceImplTest.storeRef, TAG_1));
assertTrue(this.taggingService.isTag(TaggingServiceImplTest.storeRef, UPPER_TAG));
assertTrue(this.taggingService.isTag(TaggingServiceImplTest.storeRef, LOWER_TAG));
// Remove a tag
this.taggingService.deleteTag(TaggingServiceImplTest.storeRef, UPPER_TAG);
tx.commit();
tx = this.transactionService.getUserTransaction();
tx.begin();
// Get all the tags
tags = this.taggingService.getTags(TaggingServiceImplTest.storeRef);
assertNotNull(tags);
assertEquals(1, tags.size());
assertTrue(tags.contains(TAG_1));
assertFalse(tags.contains(LOWER_TAG));
// Check isTag method
assertFalse(this.taggingService.isTag(TaggingServiceImplTest.storeRef, TAG_2));
assertTrue(this.taggingService.isTag(TaggingServiceImplTest.storeRef, TAG_1));
assertFalse(this.taggingService.isTag(TaggingServiceImplTest.storeRef, UPPER_TAG));
assertFalse(this.taggingService.isTag(TaggingServiceImplTest.storeRef, LOWER_TAG));
tx.commit();
}
@@ -233,6 +259,7 @@ public class TaggingServiceImplTest extends BaseAlfrescoSpringTest
}
public void testTagScopeFindAddRemove()
throws Exception
{
// Get scopes for node without
TagScope tagScope = this.taggingService.findTagScope(this.subDocument);
@@ -341,7 +368,6 @@ public class TaggingServiceImplTest extends BaseAlfrescoSpringTest
assertEquals(2, ts2.getTags().size());
tx.commit();
}
private void addTag(NodeRef nodeRef, String tag, int tagCount, NodeRef tagScopeNodeRef)
@@ -489,4 +515,18 @@ public class TaggingServiceImplTest extends BaseAlfrescoSpringTest
}
}
}
// == Test the JavaScript API ==
public void testJSAPI() throws Exception
{
Map model = new HashMap<String, Object>(0);
model.put("folder", this.folder);
model.put("subFolder", this.subFolder);
model.put("document", this.document);
model.put("subDocument", this.subDocument);
ScriptLocation location = new ClasspathScriptLocation("org/alfresco/repo/tagging/script/test_taggingService.js");
this.scriptService.executeScript(location, model);
}
}

View File

@@ -0,0 +1,24 @@
function testAddRemoveTag()
{
var tags = document.tags;
test.assertNotNull(tags);
test.assertEquals(0, tags.length);
document.addTag("mouse");
document.addTag("snake");
document.addTag("snail");
tags = document.tags;
test.assertNotNull(tags);
test.assertEquals(3, tags.length);
document.removeTag("cat");
document.removeTag("snake");
tags = document.tags;
test.assertNotNull(tags);
test.assertEquals(2, tags.length);
}
// Execute test's
testAddRemoveTag();

View File

@@ -56,6 +56,7 @@ import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.security.PersonService;
import org.alfresco.service.cmr.tagging.TaggingService;
import org.alfresco.service.cmr.thumbnail.ThumbnailService;
import org.alfresco.service.cmr.version.VersionService;
import org.alfresco.service.cmr.view.ExporterService;
@@ -121,6 +122,7 @@ public interface ServiceRegistry
static final QName AVM_LOCKING_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "AVMLockingService");
static final QName VIRT_SERVER_REGISTRY = QName.createQName(NamespaceService.ALFRESCO_URI, "VirtServerRegistry");
static final QName THUMBNAIL_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "ThumbnailService");
static final QName TAGGING_SERVICE = QName.createQName(NamespaceService.ALFRESCO_URI, "TaggingService");
/**
* Get the list of services provided by the Repository
@@ -393,4 +395,11 @@ public interface ServiceRegistry
*/
@NotAuditable
ThumbnailService getThumbnailService();
/**
* Get the Tagging Service
* @return
*/
@NotAuditable
TaggingService getTaggingService();
}

View File

@@ -30,6 +30,8 @@ import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
/**
* Taggin Service Interface
*
* @author Roy Wetherall
*/
public interface TaggingService
@@ -37,49 +39,78 @@ public interface TaggingService
/**
* Indicates whether the tag already exists
*
* @param tag
* @return
* @param storeRef store reference
* @param tag tag name
* @return boolean true if the tag exists, false otherwise
*/
boolean isTag(StoreRef storeRef, String tag);
/**
* Get all the tags currently available
*
* @return
* @return List<String> list of tags
*/
List<String> getTags(StoreRef storeRef);
/**
* Get all the tags currently available that match the provided filter.
*
* @param storeRef store reference
* @param filter tag filter
* @return List<String> list of tags
*/
List<String> getTags(StoreRef storeRef, String filter);
/**
* Create a new tag
*
* @param tag
* @param storeRef store reference
* @param tag tag name
*/
void createTag(StoreRef storeRef, String tag);
/**
* Delete an existing tag
*
* @param storeRef store reference
* @param tag tag name
*/
void deleteTag(StoreRef storeRef, String tag);
/**
* Add a tag to a node. Creating the tag if it does not already exist.
*
* @param nodeRef
* @param tag
* @param nodeRef node reference
* @param tag tag name
*/
void addTag(NodeRef nodeRef, String tag);
/**
* Remove a tag from a node.
*
* @param nodeRef
* @param tag
* @param nodeRef node reference
* @param tag tag name
*/
void removeTag(NodeRef nodeRef, String tag);
/**
* Get all the tags on a node
*
* @param nodeRef
* @return
* @param nodeRef node reference
* @return List<String> list of tags on the node
*/
List<String> getTags(NodeRef nodeRef);
/**
* Indicates whether the node reference is a tag scope
*
* @param nodeRef node reference
* @return boolean true if node is a tag scope, false otherwise
*/
boolean isTagScope(NodeRef nodeRef);
/**
* Adds a tag scope to the specified node
*
@@ -88,8 +119,11 @@ public interface TaggingService
void addTagScope(NodeRef nodeRef);
/**
* Removes a tag scope from a specified node.
*
* @param nodeRef
* Note that any tag count information will be lost when the scope if removed.
*
* @param nodeRef node reference
*/
void removeTagScope(NodeRef nodeRef);
@@ -107,9 +141,14 @@ public interface TaggingService
TagScope findTagScope(NodeRef nodeRef);
/**
* Finds all the tag scopes for the specified node.
* <p>
* The resulting list of tag scopes is ordered with the 'nearest' at the bedining of the list.
* <p>
* If no tag scopes are found an empty list is returned.
*
* @param nodeRef
* @return
* @param nodeRef node reference
* @return List<TagScope> list of tag scopes
*/
List<TagScope> findAllTagScopes(NodeRef nodeRef);
@@ -123,13 +162,13 @@ public interface TaggingService
/**
* Find all nodes that have been tagged with the specified tag and reside within
* the tag scope.
* the context of the node reference provided.
*
* @param tag
* @param tagScope
* @return
* @param tag tag name
* @param nodeRef node providing context for the search
* @return List<NodeRef> list of nodes tagged in the context specified, empty if none found
*/
List<NodeRef> findTaggedNodes(String tag, TagScope tagScope);
List<NodeRef> findTaggedNodes(String tag, NodeRef nodeRef);
}