mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-07-24 17:32:48 +00:00
Web Script Framework extraction - allows web scripts to be hosted in a stand-alone presentation tier.
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@7437 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -36,7 +36,6 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
|
||||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||||
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||||
@@ -179,6 +178,8 @@ public class ExporterComponent
|
|||||||
*/
|
*/
|
||||||
public void exportView(ExportPackageHandler exportHandler, ExporterCrawlerParameters parameters, Exporter progress)
|
public void exportView(ExportPackageHandler exportHandler, ExporterCrawlerParameters parameters, Exporter progress)
|
||||||
{
|
{
|
||||||
|
System.out.println("PATCHED EXPORTERCOMPONENT FOR MIKEF");
|
||||||
|
|
||||||
ParameterCheck.mandatory("Stream Handler", exportHandler);
|
ParameterCheck.mandatory("Stream Handler", exportHandler);
|
||||||
|
|
||||||
// create exporter around export handler
|
// create exporter around export handler
|
||||||
@@ -455,6 +456,7 @@ public class ExporterComponent
|
|||||||
if (parameters.isCrawlChildNodes())
|
if (parameters.isCrawlChildNodes())
|
||||||
{
|
{
|
||||||
exporter.startAssocs(nodeRef);
|
exporter.startAssocs(nodeRef);
|
||||||
|
QName prevAssocType = null;
|
||||||
List<ChildAssociationRef> childAssocs = nodeService.getChildAssocs(nodeRef);
|
List<ChildAssociationRef> childAssocs = nodeService.getChildAssocs(nodeRef);
|
||||||
for (int i = 0; i < childAssocs.size(); i++)
|
for (int i = 0; i < childAssocs.size(); i++)
|
||||||
{
|
{
|
||||||
@@ -469,15 +471,20 @@ public class ExporterComponent
|
|||||||
nodesWithSecondaryLinks.put(nodeRef, nodeRef);
|
nodesWithSecondaryLinks.put(nodeRef, nodeRef);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (i == 0 || childAssocs.get(i - 1).getTypeQName().equals(childAssocType) == false)
|
if (prevAssocType == null || prevAssocType.equals(childAssocType) == false)
|
||||||
{
|
{
|
||||||
|
if (prevAssocType != null)
|
||||||
|
{
|
||||||
|
exporter.endAssoc(nodeRef, prevAssocType);
|
||||||
|
}
|
||||||
exporter.startAssoc(nodeRef, childAssocType);
|
exporter.startAssoc(nodeRef, childAssocType);
|
||||||
|
prevAssocType = childAssocType;
|
||||||
}
|
}
|
||||||
if (!isExcludedURI(parameters.getExcludeNamespaceURIs(), childAssoc.getQName().getNamespaceURI()))
|
if (!isExcludedURI(parameters.getExcludeNamespaceURIs(), childAssoc.getQName().getNamespaceURI()))
|
||||||
{
|
{
|
||||||
walkNode(childAssoc.getChildRef(), parameters, exporter, false);
|
walkNode(childAssoc.getChildRef(), parameters, exporter, false);
|
||||||
}
|
}
|
||||||
if (i == childAssocs.size() - 1 || childAssocs.get(i + 1).getTypeQName().equals(childAssocType) == false)
|
if (i == childAssocs.size() - 1)
|
||||||
{
|
{
|
||||||
exporter.endAssoc(nodeRef, childAssocType);
|
exporter.endAssoc(nodeRef, childAssocType);
|
||||||
}
|
}
|
||||||
@@ -553,12 +560,13 @@ public class ExporterComponent
|
|||||||
{
|
{
|
||||||
// export property of datatype CONTENT
|
// export property of datatype CONTENT
|
||||||
ContentReader reader = contentService.getReader(nodeRef, property);
|
ContentReader reader = contentService.getReader(nodeRef, property);
|
||||||
if (!parameters.isCrawlContent() || reader == null || reader.exists() == false)
|
if (true)
|
||||||
{
|
{
|
||||||
// export an empty url for the content
|
// export an empty url for the content
|
||||||
ContentData contentData = (ContentData)value;
|
ContentData contentData = (ContentData)value;
|
||||||
ContentData noContentURL = new ContentData("", contentData.getMimetype(), contentData.getSize(), contentData.getEncoding());
|
// ContentData noContentURL = new ContentData("", contentData.getMimetype(), contentData.getSize(), contentData.getEncoding());
|
||||||
exporter.content(nodeRef, property, null, noContentURL, index);
|
// exporter.content(nodeRef, property, null, noContentURL, index);
|
||||||
|
exporter.value(nodeRef, property, contentData, index);
|
||||||
exporter.warning("Skipped content for property " + property + " on node " + nodeRef);
|
exporter.warning("Skipped content for property " + property + " on node " + nodeRef);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -703,15 +711,15 @@ public class ExporterComponent
|
|||||||
*/
|
*/
|
||||||
private boolean isExcludeAspect(QName aspectQName)
|
private boolean isExcludeAspect(QName aspectQName)
|
||||||
{
|
{
|
||||||
if (aspectQName.equals(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT) ||
|
// if (aspectQName.equals(ContentModel.ASPECT_MULTILINGUAL_DOCUMENT) ||
|
||||||
aspectQName.equals(ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION))
|
// aspectQName.equals(ContentModel.ASPECT_MULTILINGUAL_EMPTY_TRANSLATION))
|
||||||
{
|
// {
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
else
|
// else
|
||||||
{
|
// {
|
||||||
return false;
|
return false;
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -220,6 +220,7 @@ public class ImporterComponent
|
|||||||
*/
|
*/
|
||||||
public void importView(Reader viewReader, Location location, ImporterBinding binding, ImporterProgress progress)
|
public void importView(Reader viewReader, Location location, ImporterBinding binding, ImporterProgress progress)
|
||||||
{
|
{
|
||||||
|
System.out.println("PATCHED IMPORTERCOMPONENT FOR MIKEF");
|
||||||
NodeRef nodeRef = getNodeRef(location, binding);
|
NodeRef nodeRef = getNodeRef(location, binding);
|
||||||
parserImport(nodeRef, location.getChildAssocType(), viewReader, new DefaultStreamHandler(), binding, progress);
|
parserImport(nodeRef, location.getChildAssocType(), viewReader, new DefaultStreamHandler(), binding, progress);
|
||||||
}
|
}
|
||||||
@@ -229,6 +230,7 @@ public class ImporterComponent
|
|||||||
*/
|
*/
|
||||||
public void importView(ImportPackageHandler importHandler, Location location, ImporterBinding binding, ImporterProgress progress) throws ImporterException
|
public void importView(ImportPackageHandler importHandler, Location location, ImporterBinding binding, ImporterProgress progress) throws ImporterException
|
||||||
{
|
{
|
||||||
|
System.out.println("PATCHED IMPORTERCOMPONENT FOR MIKEF");
|
||||||
importHandler.startImport();
|
importHandler.startImport();
|
||||||
Reader dataFileReader = importHandler.getDataStream();
|
Reader dataFileReader = importHandler.getDataStream();
|
||||||
NodeRef nodeRef = getNodeRef(location, binding);
|
NodeRef nodeRef = getNodeRef(location, binding);
|
||||||
@@ -660,17 +662,18 @@ public class ImporterComponent
|
|||||||
{
|
{
|
||||||
DataTypeDefinition dataTypeDef = dictionaryService.getDataType(DataTypeDefinition.CONTENT);
|
DataTypeDefinition dataTypeDef = dictionaryService.getDataType(DataTypeDefinition.CONTENT);
|
||||||
ContentData contentData = (ContentData)DefaultTypeConverter.INSTANCE.convert(dataTypeDef, importContentData);
|
ContentData contentData = (ContentData)DefaultTypeConverter.INSTANCE.convert(dataTypeDef, importContentData);
|
||||||
String contentUrl = contentData.getContentUrl();
|
nodeService.setProperty(nodeRef, propertyName, contentData);
|
||||||
if (contentUrl != null && contentUrl.length() > 0)
|
// String contentUrl = contentData.getContentUrl();
|
||||||
{
|
// if (contentUrl != null && contentUrl.length() > 0)
|
||||||
// import the content from the url
|
// {
|
||||||
InputStream contentStream = streamHandler.importStream(contentUrl);
|
// // import the content from the url
|
||||||
ContentWriter writer = contentService.getWriter(nodeRef, propertyName, true);
|
// InputStream contentStream = streamHandler.importStream(contentUrl);
|
||||||
writer.setEncoding(contentData.getEncoding());
|
// ContentWriter writer = contentService.getWriter(nodeRef, propertyName, true);
|
||||||
writer.setMimetype(contentData.getMimetype());
|
// writer.setEncoding(contentData.getEncoding());
|
||||||
writer.putContent(contentStream);
|
// writer.setMimetype(contentData.getMimetype());
|
||||||
reportContentCreated(nodeRef, contentUrl);
|
// writer.putContent(contentStream);
|
||||||
}
|
// reportContentCreated(nodeRef, contentUrl);
|
||||||
|
// }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -70,6 +70,7 @@ import org.alfresco.service.cmr.version.VersionType;
|
|||||||
import org.alfresco.service.namespace.NamespaceService;
|
import org.alfresco.service.namespace.NamespaceService;
|
||||||
import org.alfresco.service.namespace.QName;
|
import org.alfresco.service.namespace.QName;
|
||||||
import org.alfresco.service.namespace.RegexQNamePattern;
|
import org.alfresco.service.namespace.RegexQNamePattern;
|
||||||
|
import org.alfresco.util.Content;
|
||||||
import org.alfresco.util.GUID;
|
import org.alfresco.util.GUID;
|
||||||
import org.alfresco.util.ParameterCheck;
|
import org.alfresco.util.ParameterCheck;
|
||||||
import org.alfresco.util.URLEncoder;
|
import org.alfresco.util.URLEncoder;
|
||||||
@@ -2159,62 +2160,10 @@ public class ScriptNode implements Serializable, Scopeable
|
|||||||
// Inner Classes
|
// Inner Classes
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inner class for representing content
|
|
||||||
*/
|
|
||||||
public static abstract class ScriptContent implements Serializable
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @return the content stream as a string
|
|
||||||
*/
|
|
||||||
public abstract String getContent();
|
|
||||||
|
|
||||||
public String jsGet_content()
|
|
||||||
{
|
|
||||||
return getContent();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the content mimetype
|
|
||||||
*/
|
|
||||||
public abstract String getMimetype();
|
|
||||||
|
|
||||||
public String jsGet_mimetype()
|
|
||||||
{
|
|
||||||
return getMimetype();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the content encoding
|
|
||||||
*/
|
|
||||||
public abstract String getEncoding();
|
|
||||||
|
|
||||||
public String jsGet_encoding()
|
|
||||||
{
|
|
||||||
return getEncoding();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return the content size
|
|
||||||
*/
|
|
||||||
public abstract long getSize();
|
|
||||||
|
|
||||||
public long jsGet_size()
|
|
||||||
{
|
|
||||||
return getSize();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return input stream onto content
|
|
||||||
*/
|
|
||||||
/*package*/ abstract InputStream getInputStream();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Inner class wrapping and providing access to a ContentData property
|
* Inner class wrapping and providing access to a ContentData property
|
||||||
*/
|
*/
|
||||||
public class ScriptContentData extends ScriptContent implements Serializable
|
public class ScriptContentData implements Content, Serializable
|
||||||
{
|
{
|
||||||
private static final long serialVersionUID = -7819328543933312278L;
|
private static final long serialVersionUID = -7819328543933312278L;
|
||||||
|
|
||||||
@@ -2241,7 +2190,7 @@ public class ScriptNode implements Serializable, Scopeable
|
|||||||
return (reader != null && reader.exists()) ? reader.getContentString() : "";
|
return (reader != null && reader.exists()) ? reader.getContentString() : "";
|
||||||
}
|
}
|
||||||
|
|
||||||
/*package*/ InputStream getInputStream()
|
public InputStream getInputStream()
|
||||||
{
|
{
|
||||||
ContentService contentService = services.getContentService();
|
ContentService contentService = services.getContentService();
|
||||||
ContentReader reader = contentService.getReader(nodeRef, property);
|
ContentReader reader = contentService.getReader(nodeRef, property);
|
||||||
@@ -2275,7 +2224,7 @@ public class ScriptNode implements Serializable, Scopeable
|
|||||||
*
|
*
|
||||||
* @param content ScriptContent to set
|
* @param content ScriptContent to set
|
||||||
*/
|
*/
|
||||||
public void write(ScriptContent content)
|
public void write(Content content)
|
||||||
{
|
{
|
||||||
ContentService contentService = services.getContentService();
|
ContentService contentService = services.getContentService();
|
||||||
ContentWriter writer = contentService.getWriter(nodeRef, this.property, true);
|
ContentWriter writer = contentService.getWriter(nodeRef, this.property, true);
|
||||||
@@ -2371,79 +2320,6 @@ public class ScriptNode implements Serializable, Scopeable
|
|||||||
private QName property;
|
private QName property;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Inner class wrapping and providing access to a Content stream
|
|
||||||
*/
|
|
||||||
public static class ScriptContentStream extends ScriptContent implements Serializable
|
|
||||||
{
|
|
||||||
private static final long serialVersionUID = -7819328543933312278L;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constructor
|
|
||||||
*
|
|
||||||
* @param stream content input stream
|
|
||||||
* @param mimetype content mimetype
|
|
||||||
*/
|
|
||||||
public ScriptContentStream(InputStream stream, String mimetype, String encoding)
|
|
||||||
{
|
|
||||||
this.stream = stream;
|
|
||||||
this.mimetype = mimetype;
|
|
||||||
this.encoding = encoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.alfresco.repo.jscript.ScriptNode.ScriptContent#getContent()
|
|
||||||
*/
|
|
||||||
public String getContent()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
ByteArrayOutputStream os = new ByteArrayOutputStream();
|
|
||||||
FileCopyUtils.copy(stream, os); // both streams are closed
|
|
||||||
byte[] bytes = os.toByteArray();
|
|
||||||
// get the encoding for the string
|
|
||||||
String encoding = getEncoding();
|
|
||||||
// create the string from the byte[] using encoding if necessary
|
|
||||||
String content = (encoding == null) ? new String(bytes) : new String(bytes, encoding);
|
|
||||||
// done
|
|
||||||
return content;
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
throw new ContentIOException("Failed to copy content to string", e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*package*/ InputStream getInputStream()
|
|
||||||
{
|
|
||||||
return stream;
|
|
||||||
}
|
|
||||||
|
|
||||||
public long getSize()
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMimetype()
|
|
||||||
{
|
|
||||||
return mimetype;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getEncoding()
|
|
||||||
{
|
|
||||||
return encoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private InputStream stream;
|
|
||||||
|
|
||||||
private String mimetype;
|
|
||||||
|
|
||||||
private String encoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface contract for simple anonymous classes that implement document transformations
|
* Interface contract for simple anonymous classes that implement document transformations
|
||||||
*/
|
*/
|
||||||
|
@@ -1,79 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2005-2007 Alfresco Software Limited.
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
|
|
||||||
* As a special exception to the terms and conditions of version 2.0 of
|
|
||||||
* the GPL, you may redistribute this Program in connection with Free/Libre
|
|
||||||
* and Open Source Software ("FLOSS") applications as described in Alfresco's
|
|
||||||
* FLOSS exception. You should have recieved a copy of the text describing
|
|
||||||
* the FLOSS exception, and it is also available here:
|
|
||||||
* http://www.alfresco.com/legal/licensing"
|
|
||||||
*/
|
|
||||||
package org.alfresco.repo.template;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import freemarker.template.TemplateMethodModelEx;
|
|
||||||
import freemarker.template.TemplateModelException;
|
|
||||||
import freemarker.template.TemplateScalarModel;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author David Caruana
|
|
||||||
*
|
|
||||||
* Custom FreeMarker Template language method.
|
|
||||||
* <p>
|
|
||||||
* Render absolute url for the specified url (only if the url isn't already absolute).
|
|
||||||
* <p>
|
|
||||||
* Usage: absurl(String url)
|
|
||||||
*/
|
|
||||||
public final class AbsoluteUrlMethod implements TemplateMethodModelEx
|
|
||||||
{
|
|
||||||
private String basePath;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Construct
|
|
||||||
*
|
|
||||||
* @param basePath base path used to construct absolute url
|
|
||||||
*/
|
|
||||||
public AbsoluteUrlMethod(String basePath)
|
|
||||||
{
|
|
||||||
this.basePath = basePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @see freemarker.template.TemplateMethodModel#exec(java.util.List)
|
|
||||||
*/
|
|
||||||
public Object exec(List args) throws TemplateModelException
|
|
||||||
{
|
|
||||||
String result = "";
|
|
||||||
|
|
||||||
if (args.size() == 1)
|
|
||||||
{
|
|
||||||
Object arg0 = args.get(0);
|
|
||||||
if (arg0 instanceof TemplateScalarModel)
|
|
||||||
{
|
|
||||||
result = ((TemplateScalarModel)arg0).getAsString();
|
|
||||||
if (result.startsWith("/"))
|
|
||||||
{
|
|
||||||
result = basePath + result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user