From 45052611958529c3125150d35a54c57e2c926c1b Mon Sep 17 00:00:00 2001 From: Ariel Backenroth Date: Wed, 18 Oct 2006 06:20:50 +0000 Subject: [PATCH] - moving AVMRemoteInputStream from jndi-client project to repo project - extracting utility methods from sample website into generalized extension functions that can be used from xsl, freemarker (i hope), and jsp. they all use AVMRemote to access data and each context has it's own adapter. - implemented callout functions from xsl. able to load multiple documents and traverse them. - removed QNames from TemplatingService and added them to WCMModel. this will break edit on any existing assets - you'll have to create new ones that have the right properties. still not happy with model since besides not having child associations in place, i don't have a way of differentiating between the generated xmls and the other generated assets. major bug. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/WCM-DEV2/root@4138 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/model/wcmModel.xml | 22 +++- source/java/org/alfresco/model/WCMModel.java | 4 + .../repo/avm/AVMRemoteInputStream.java | 116 ++++++++++++++++++ 3 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 source/java/org/alfresco/repo/avm/AVMRemoteInputStream.java diff --git a/config/alfresco/model/wcmModel.xml b/config/alfresco/model/wcmModel.xml index 1333c3081a..24bcb577b5 100644 --- a/config/alfresco/model/wcmModel.xml +++ b/config/alfresco/model/wcmModel.xml @@ -94,7 +94,7 @@ - XML Transformer + Template Output Method Type @@ -102,7 +102,7 @@ true - Type + File extension for generated assets d:text true @@ -113,7 +113,21 @@ - - + + XML file generated by a template + + + Template that generated this asset + d:noderef + true + + + Template that generated this asset + d:noderef + true + + + + diff --git a/source/java/org/alfresco/model/WCMModel.java b/source/java/org/alfresco/model/WCMModel.java index c4c26bd617..3aea4aefb9 100644 --- a/source/java/org/alfresco/model/WCMModel.java +++ b/source/java/org/alfresco/model/WCMModel.java @@ -34,4 +34,8 @@ public interface WCMModel public static final QName PROP_TEMPLATE_OUTPUT_METHOD_TYPE = QName.createQName(NamespaceService.WCM_MODEL_1_0_URI, "templateoutputmethodtype"); public static final QName PROP_TEMPLATE_OUTPUT_METHOD_DERIVED_FILE_EXTENSION = QName.createQName(NamespaceService.WCM_MODEL_1_0_URI, "templateoutputmethodderivedfileextension"); public static final QName PROP_TEMPLATE_SOURCE = QName.createQName(NamespaceService.WCM_MODEL_1_0_URI, "templatesource"); + + public static final QName ASPECT_TEMPLATE_DERIVED = QName.createQName(NamespaceService.WCM_MODEL_1_0_URI, "templatederived"); + public static final QName PROP_TEMPLATE_DERIVED_FROM = QName.createQName(NamespaceService.WCM_MODEL_1_0_URI, "templatederivedfrom"); + public static final QName PROP_TEMPLATE_DERIVED_FROM_NAME = QName.createQName(NamespaceService.WCM_MODEL_1_0_URI, "templatederivedfromname"); } diff --git a/source/java/org/alfresco/repo/avm/AVMRemoteInputStream.java b/source/java/org/alfresco/repo/avm/AVMRemoteInputStream.java new file mode 100644 index 0000000000..a1bec72069 --- /dev/null +++ b/source/java/org/alfresco/repo/avm/AVMRemoteInputStream.java @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2006 Alfresco, Inc. + * + * Licensed under the Mozilla Public License version 1.1 + * with a permitted attribution clause. You may obtain a + * copy of the License at + * + * http://www.alfresco.org/legal/license.txt + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + * either express or implied. See the License for the specific + * language governing permissions and limitations under the + * License. + */ + +package org.alfresco.repo.avm; + +import java.io.IOException; +import java.io.InputStream; + +/** + * Wrapper around AVMRemote stream reading. + * @author britt + */ +public class AVMRemoteInputStream extends InputStream +{ + /** + * The AVMRemote reference. + */ + private AVMRemote fAVMRemote; + + /** + * The handle to the input stream. + */ + private String fHandle; + + /** + * Construct one. + * @param handle The handle returned by getInputStream(); + * @param remote The AVMRemote instance. + */ + public AVMRemoteInputStream(String handle, AVMRemote remote) + { + fHandle = handle; + fAVMRemote = remote; + } + + /** + * Read in a single byte. + * @return The byte as 0-255 or -1 for eof. + */ + @Override + public int read() throws IOException + { + try + { + byte [] buff = fAVMRemote.readInput(fHandle, 1); + if (buff.length == 0) + { + return -1; + } + return ((int)buff[0]) & 0xff; + } + catch (Exception e) + { + throw new IOException("Remote I/O Error."); + } + } + + /** + * Read a buffer of bytes. + * @param b The buffer into which to put the bytes. + * @param off The offset into the buffer. + * @param len The number of bytes to read. + * @return The actual number of bytes read or -1 on eof. + */ + @Override + public int read(byte[] b, int off, int len) throws IOException + { + try + { + byte [] buff = fAVMRemote.readInput(fHandle, len); + if (buff.length == 0) + { + return -1; + } + for (int i = 0; i < buff.length; i++) + { + b[off + i] = buff[i]; + } + return buff.length; + } + catch (Exception e) + { + throw new IOException("Remote I/O Error."); + } + } + + /** + * Close the underlying AVMRemote handle. + */ + @Override + public void close() throws IOException + { + try + { + fAVMRemote.closeInputHandle(fHandle); + } + catch (Exception e) + { + throw new IOException("Remote Error closing input stream."); + } + } +}