propsToPersist, FormData data)
+ {
+ ContentWriter writer = this.contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
+
+ if (writer != null)
+ {
+ // determine whether there is any content for the node yet i.e. it's a create
+ boolean defaultMimetypeRequired = (this.nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT) == null);
+
+ // write the content
+ writer.putContent((String)fieldData.getValue());
+
+ // if there was no content set a sensible default mimetype if necessary
+ if (defaultMimetypeRequired)
+ {
+ // if the transient mimetype property has already set the mimetype don't do anything
+ ContentData contentData = (ContentData) propsToPersist.get(ContentModel.PROP_CONTENT);
+ if (contentData != null)
+ {
+ String mimetype = contentData.getMimetype();
+ if (mimetype == null)
+ {
+ contentData = ContentData.setMimetype(contentData, determineDefaultMimetype(data));
+ }
+ }
+ else
+ {
+ // content data has not been persisted yet so get it from the node
+ contentData = (ContentData) this.nodeService.getProperty(nodeRef, ContentModel.PROP_CONTENT);
+ if (contentData != null)
+ {
+ contentData = ContentData.setMimetype(contentData, determineDefaultMimetype(data));
+ }
+ }
+
+ // add the potentially changed content data object back to property map for persistence
+ propsToPersist.put(ContentModel.PROP_CONTENT, contentData);
+ }
+ }
+ }
+
+ /**
+ * Looks through the form data for the 'mimetype' transient field
+ * and returns it's value if found, otherwise the default 'text/plain'
+ * is returned
+ *
+ * @param data Form data being persisted
+ * @return The default mimetype
+ */
+ protected String determineDefaultMimetype(FormData data)
+ {
+ String mimetype = DEFAULT_CONTENT_MIMETYPE;
+
+ if (data != null)
+ {
+ FieldData mimetypeField = data.getFieldData(PROP + DATA_KEY_SEPARATOR + TRANSIENT_MIMETYPE);
+ if (mimetypeField != null)
+ {
+ String mimetypeFieldValue = (String)mimetypeField.getValue();
+ if (mimetypeFieldValue != null && mimetypeFieldValue.length() > 0)
+ {
+ mimetype = mimetypeFieldValue;
+ }
+ }
+ }
+
+ return mimetype;
+ }
}
/**
diff --git a/source/java/org/alfresco/repo/tagging/TaggingServiceImpl.java b/source/java/org/alfresco/repo/tagging/TaggingServiceImpl.java
index 39a90c2d45..bf4089f8fc 100644
--- a/source/java/org/alfresco/repo/tagging/TaggingServiceImpl.java
+++ b/source/java/org/alfresco/repo/tagging/TaggingServiceImpl.java
@@ -205,15 +205,16 @@ public class TaggingServiceImpl implements TaggingService,
/**
* @see org.alfresco.service.cmr.tagging.TaggingService#createTag(java.lang.String)
*/
- public void createTag(StoreRef storeRef, String tag)
+ public NodeRef createTag(StoreRef storeRef, String tag)
{
// Lower the case of the tag
tag = tag.toLowerCase();
if (isTag(storeRef, tag) == false)
{
- this.categoryService.createRootCategory(storeRef, ContentModel.ASPECT_TAGGABLE, tag);
- }
+ return this.categoryService.createRootCategory(storeRef, ContentModel.ASPECT_TAGGABLE, tag);
+ }
+ return null;
}
/**
@@ -326,7 +327,7 @@ public class TaggingServiceImpl implements TaggingService,
* @param tag tag
* @return NodeRef tag node reference or null not exist
*/
- private NodeRef getTagNodeRef(StoreRef storeRef, String tag)
+ public NodeRef getTagNodeRef(StoreRef storeRef, String tag)
{
NodeRef tagNodeRef = null;
String query = "+PATH:\"cm:taggable/cm:" + ISO9075.encode(tag) + "\"";
diff --git a/source/java/org/alfresco/repo/tagging/script/ScriptTaggingService.java b/source/java/org/alfresco/repo/tagging/script/ScriptTaggingService.java
index c55c8a3d81..a8804b8876 100644
--- a/source/java/org/alfresco/repo/tagging/script/ScriptTaggingService.java
+++ b/source/java/org/alfresco/repo/tagging/script/ScriptTaggingService.java
@@ -27,7 +27,9 @@ package org.alfresco.repo.tagging.script;
import java.util.List;
import org.alfresco.repo.jscript.BaseScopableProcessorExtension;
+import org.alfresco.repo.jscript.ScriptNode;
import org.alfresco.service.ServiceRegistry;
+import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.StoreRef;
@@ -78,4 +80,39 @@ public class ScriptTaggingService extends BaseScopableProcessorExtension
return (String[])result.toArray(new String[result.size()]);
}
+ /**
+ * Get a tag by name if available in a store
+ *
+ * @param store store reference
+ * @param tag tag name
+ * @return ScriptNode tag node, or null if not found
+ */
+ public ScriptNode getTag(String store, String tag)
+ {
+ StoreRef storeRef = new StoreRef(store);
+ NodeRef result = this.serviceRegistry.getTaggingService().getTagNodeRef(storeRef, tag);
+ if (result != null)
+ {
+ return new ScriptNode(result, this.serviceRegistry);
+ }
+ return null;
+ }
+
+ /**
+ * Create a tag in a given store
+ *
+ * @param store store reference
+ * @param tag tag name
+ * @return ScriptNode newly created tag node, or null if unable to create
+ */
+ public ScriptNode createTag(String store, String tag)
+ {
+ StoreRef storeRef = new StoreRef(store);
+ NodeRef result = this.serviceRegistry.getTaggingService().createTag(storeRef, tag);
+ if (result != null)
+ {
+ return new ScriptNode(result, this.serviceRegistry);
+ }
+ return null;
+ }
}
diff --git a/source/java/org/alfresco/service/cmr/tagging/TaggingService.java b/source/java/org/alfresco/service/cmr/tagging/TaggingService.java
index 565721ccf5..65fea19568 100644
--- a/source/java/org/alfresco/service/cmr/tagging/TaggingService.java
+++ b/source/java/org/alfresco/service/cmr/tagging/TaggingService.java
@@ -67,7 +67,7 @@ public interface TaggingService
* @param storeRef store reference
* @param tag tag name
*/
- void createTag(StoreRef storeRef, String tag);
+ NodeRef createTag(StoreRef storeRef, String tag);
/**
* Delete an existing tag
@@ -84,7 +84,18 @@ public interface TaggingService
* @param tag tag name
*/
void addTag(NodeRef nodeRef, String tag);
-
+
+ /**
+ * Gets the node reference for a given tag.
+ *
+ * Returns null if tag is not present.
+ *
+ * @param storeRef store reference
+ * @param tag tag
+ * @return NodeRef tag node reference or null not exist
+ */
+ NodeRef getTagNodeRef(StoreRef storeRef, String tag);
+
/**
* Adds a list of tags to a node.
*