Implementing (some of) transfer service review rework.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@19000 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Mark Rogers
2010-03-03 15:10:31 +00:00
parent ec876e46dc
commit 46f2fe2812
12 changed files with 401 additions and 351 deletions

View File

@@ -491,64 +491,6 @@ public class HttpClientTransmitterImpl implements TransferTransmitter
postContentRequest.releaseConnection();
}
} // end of sendContent
/**
*
*/
public Set<TransferMessage> getMessages(Transfer transfer)
{
// TODO How to signal last message ? return null rather than empty
Set<TransferMessage> messages = new HashSet<TransferMessage>();
TransferTarget target = transfer.getTransferTarget();
HttpMethod messagesRequest = new GetMethod();
try
{
HostConfiguration hostConfig = getHostConfig(target);
HttpState httpState = getHttpState(target);
messagesRequest.setPath(target.getEndpointPath() + "/messages");
//Put the transferId on the query string
messagesRequest.setQueryString(
new NameValuePair[] {new NameValuePair("transferId", transfer.getTransferId())});
try
{
int responseStatus = httpClient.executeMethod(hostConfig, messagesRequest, httpState);
checkResponseStatus("getMessages", responseStatus, messagesRequest);
//If we get here then we've received a 200 response
//We're expecting the transfer id encoded in a JSON object...
JSONObject lookupResult = new JSONObject(messagesRequest.getResponseBodyAsString());
JSONArray data = lookupResult.getJSONArray("data");
for(int i = 0; i < data.length(); i++)
{
JSONObject obj = data.getJSONObject(i);
String message = obj.getString("message");
//TODO Need some sort of TransferMessage impl
// messages.add(new TransferMessageImpl());
}
return messages;
}
catch (RuntimeException e)
{
throw e;
}
catch (Exception e)
{
String error = "Failed to execute HTTP request to target";
log.debug(error, e);
throw new TransferException(MSG_HTTP_REQUEST_FAILED, new Object[]{"getMessages", target.toString(), e.toString()}, e);
}
}
finally
{
messagesRequest.releaseConnection();
}
}
/**
*

View File

@@ -24,7 +24,7 @@ import org.alfresco.service.cmr.transfer.TransferEvent;
/**
* An abstract implementation of TransferEvent.
* Also implements RangedTransferEvent.
* Also implements the operations required by RangedTransferEvent.
* @see TransferEvent
* @see RangedTransferEvent
*/
@@ -105,23 +105,31 @@ public abstract class TransferEventImpl implements TransferEvent
return range;
}
/**
* A simple human readable summary of this event, the format of this string is
* not guaranteed and is liable to change.
*/
public String toString()
{
return "TransferEventImpl : " + this.getTime() + ", " + this.getTransferState();
return this.getClass().getSimpleName() + ", " + this.getTime() + ", " + this.getTransferState();
}
public boolean equals(Object obj)
{
if(obj instanceof TransferEventImpl)
if(obj != null)
{
TransferEventImpl other = (TransferEventImpl)obj;
if(other.getTransferState().equals(this.getTransferState()) &&
other.getPosition() == this.getPosition() &&
other.getTime().equals(this.getTime()))
if(this.getClass().equals(obj.getClass()))
{
return true;
TransferEventImpl other = (TransferEventImpl)obj;
if(other.getTransferState().equals(this.getTransferState()) &&
other.getPosition() == this.getPosition() &&
other.getTime().equals(this.getTime()))
{
return true;
}
}
}
// not a match
return false;
}

View File

@@ -1,25 +0,0 @@
/*
* Copyright (C) 2009-2010 Alfresco Software Limited.
*
* This file is part of Alfresco
*
* Alfresco is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Alfresco 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
*/
package org.alfresco.repo.transfer;
public interface TransferMessage
{
String getMessage();
}

View File

@@ -24,7 +24,6 @@ import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
@@ -35,29 +34,18 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ThreadPoolExecutor;
import org.alfresco.service.cmr.transfer.TransferEvent;
import javax.transaction.HeuristicMixedException;
import javax.transaction.HeuristicRollbackException;
import javax.transaction.NotSupportedException;
import javax.transaction.RollbackException;
import javax.transaction.SystemException;
import javax.transaction.UserTransaction;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.jlan.smb.dcerpc.UUID;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.transaction.RetryingTransactionHelper;
import org.alfresco.repo.transfer.manifest.TestTransferManifestProcessor;
import org.alfresco.repo.transfer.manifest.TransferManifestDeletedNode;
import org.alfresco.repo.transfer.manifest.TransferManifestHeader;
import org.alfresco.repo.transfer.manifest.TransferManifestNode;
import org.alfresco.repo.transfer.manifest.TransferManifestNodeFactory;
import org.alfresco.repo.transfer.manifest.TransferManifestNodeFactoryImpl;
import org.alfresco.repo.transfer.manifest.TransferManifestNodeHelper;
import org.alfresco.repo.transfer.manifest.TransferManifestNormalNode;
import org.alfresco.repo.transfer.manifest.TransferManifestProcessor;
@@ -69,7 +57,6 @@ import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ActionService;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.ContentWriter;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
@@ -77,11 +64,11 @@ import org.alfresco.service.cmr.search.ResultSet;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.transfer.TransferCallback;
import org.alfresco.service.cmr.transfer.TransferDefinition;
import org.alfresco.service.cmr.transfer.TransferEvent;
import org.alfresco.service.cmr.transfer.TransferException;
import org.alfresco.service.cmr.transfer.TransferProgress;
import org.alfresco.service.cmr.transfer.TransferService;
import org.alfresco.service.cmr.transfer.TransferTarget;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.namespace.RegexQNamePattern;
import org.alfresco.service.transaction.TransactionService;
@@ -89,7 +76,6 @@ import org.alfresco.util.TempFileProvider;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.PropertyCheck;
import org.xml.sax.SAXException;
public class TransferServiceImpl implements TransferService
@@ -375,6 +361,13 @@ public class TransferServiceImpl implements TransferService
{
eventProcessor.observers.addAll(callbacks);
}
/*
* Note:
* callback should be Serializable to be passed through the action API
* However Serializable is not used so it does not matter. Perhaps the action API should be
* changed? Or we could add a Serializable proxy here.
*/
Map<String, Serializable> params = new HashMap<String, Serializable>();
params.put("targetName", targetName);

View File

@@ -354,7 +354,6 @@ public class TransferServiceImplTest extends BaseAlfrescoSpringTest
target.setEndpointPath(endpointPath2);
target.setEndpointPort(endpointPort2);
target.setEndpointProtocol(endpointProtocol2);
target.setName(updateMe);
target.setPassword(password2);
target.setUsername(username2);

View File

@@ -93,10 +93,4 @@ public interface TransferTransmitter
*/
TransferProgress getStatus(Transfer transfer) throws TransferException;
/**
* Get Async Messages for a transfer.
* Server Side Messages.
* @return messages
*/
Set<TransferMessage> getMessages(Transfer transfer);
}

View File

@@ -100,11 +100,6 @@ public class UnitTestInProcessTransmitterImpl implements TransferTransmitter
}, false, true);
}
public Set<TransferMessage> getMessages(Transfer transfer)
{
String transferId = transfer.getTransferId();
return null;
}
public void prepare(Transfer transfer) throws TransferException
{

View File

@@ -33,15 +33,19 @@ import java.util.Map;
import java.util.Map.Entry;
import org.alfresco.repo.transfer.PathHelper;
import org.alfresco.repo.transfer.TransferServiceImpl;
import org.alfresco.service.cmr.repository.AssociationRef;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.ContentData;
import org.alfresco.service.cmr.repository.MLText;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.Path;
import org.alfresco.service.cmr.transfer.TransferException;
import org.alfresco.service.namespace.NamespaceException;
import org.alfresco.service.namespace.NamespacePrefixResolver;
import org.alfresco.service.namespace.QName;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.extensions.surf.util.Base64;
import org.springframework.extensions.surf.util.I18NUtil;
import org.springframework.extensions.surf.util.ISO8601DateFormat;
@@ -53,7 +57,7 @@ import org.xml.sax.helpers.DefaultHandler;
/**
* SAX XML Content Handler to read a transfer manifest XML Stream and
* delegate processing to the specified TransferManifestProcessor
* delegate processing of the manifest to the specified TransferManifestProcessor
*
* @author Mark Rogers
*/
@@ -61,15 +65,17 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content
{
private TransferManifestProcessor processor;
private static Log logger = LogFactory.getLog(XMLTransferManifestReader.class);
private static final String MSG_NO_ENCODING = "transfer_service.no_encoding";
private static final String MSG_UNABLE_DESERIALIZE = "transfer_service.unable_to_deserialise";
/**
* These are the namespaces used within the document - there may be a different mapping to
* the namespaces of the Data Dictionary.
*/
// Map<String, String> documentNamespaces = new HashMap<String, String>();
*/
LinkedList<HashMap<String, String>> namespaces = new LinkedList<HashMap<String, String>>();
final String TRANSFER_URI = ManifestModel.TRANSFER_MODEL_1_0_URI;
final String XMLNS_URI = "http://www.w3.org/XML/1998/namespace";
LinkedList<HashMap<String, String>> namespaces = new LinkedList<HashMap<String, String>>();
public XMLTransferManifestReader(TransferManifestProcessor snapshotProcessor)
{
@@ -275,6 +281,7 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content
}
else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_VALUE_SERIALIZED))
{
props.put("encoding", atts.getValue("", "encoding"));
buffer = new StringBuffer();
}
else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_MLVALUE))
@@ -482,34 +489,41 @@ public class XMLTransferManifestReader extends DefaultHandler implements Content
else if(elementName.equals(ManifestModel.LOCALNAME_ELEMENT_VALUE_SERIALIZED))
{
Collection<Serializable> values = (Collection<Serializable>)props.get("values");
String encoding = (String)props.get("encoding");
String strValue = buffer.toString();
Object value = null;
// TODO assumes "base64/ObjectOutputStream" - should check
try
if(encoding.equalsIgnoreCase("base64/ObjectOutputStream"))
{
byte[] data = Base64.decode(strValue.getBytes("UTF-8"));
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
value = ois.readObject();
try
{
byte[] data = Base64.decode(strValue.getBytes("UTF-8"));
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(data));
value = ois.readObject();
}
catch (IOException error)
{
throw new TransferException(MSG_UNABLE_DESERIALIZE, error);
}
catch (ClassNotFoundException error)
{
throw new TransferException(MSG_UNABLE_DESERIALIZE, error);
}
}
catch (IOException error)
else
{
//TODO Error handler - should this fail the transfer ?
error.printStackTrace();
}
catch (ClassNotFoundException error)
{
//TODO Error handler - should this fail the transfer ?
error.printStackTrace();
throw new TransferException(MSG_NO_ENCODING, new Object[]{encoding});
}
if(values != null)
{
// This is a values array
values.add((Serializable)value);
}
else
{
// This is a single value
props.put("value", value);
}
}

View File

@@ -49,27 +49,29 @@ import org.springframework.extensions.surf.util.ISO8601DateFormat;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
//import com.sun.org.apache.xml.internal.security.utils.Base64;
/**
* XMLTransferManifestWriter
* Writes the transfer manifest out in XML format to the specified writer.
*
* XMLTransferManifestWriter is a statefull object used for writing out a single transfer manifest
* file in XML format to the writer passed in via startTransferManifest.
*
* Writes the transfer manifest out to XML format.
* Call startTransferManifest, writeTransferManifestHeader, writeTransferManifestNode (0 to many),
* endTransferManifest.
*
* @author Mark Rogers
*/
public class XMLTransferManifestWriter implements TransferManifestWriter
{
{
public XMLTransferManifestWriter()
{
}
private XMLWriter writer;
final AttributesImpl EMPTY_ATTRIBUTES = new AttributesImpl();
final String PREFIX = ManifestModel.MANIFEST_PREFIX;
/**
* Start the transfer manifest
*/
@@ -79,27 +81,31 @@ public class XMLTransferManifestWriter implements TransferManifestWriter
format.setNewLineAfterDeclaration(false);
format.setIndentSize(3);
format.setEncoding("UTF-8");
this.writer = new XMLWriter(writer, format);
this.writer.startDocument();
this.writer.startPrefixMapping(PREFIX, TransferModel.TRANSFER_MODEL_1_0_URI);
this.writer.startPrefixMapping("cm", NamespaceService.CONTENT_MODEL_1_0_URI);
// Start Transfer Manifest // uri, name, prefix
this.writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_TRANSFER_MAINIFEST, PREFIX + ":" + ManifestModel.LOCALNAME_TRANSFER_MAINIFEST, EMPTY_ATTRIBUTES);
// Start Transfer Manifest // uri, name, prefix
this.writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_TRANSFER_MAINIFEST, PREFIX + ":"
+ ManifestModel.LOCALNAME_TRANSFER_MAINIFEST, EMPTY_ATTRIBUTES);
}
/**
* End the transfer manifest
* End the transfer manifest
*/
public void endTransferManifest() throws SAXException
{
// End Transfer Manifest
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_TRANSFER_MAINIFEST, PREFIX + ":" + ManifestModel.LOCALNAME_TRANSFER_MAINIFEST);
writer.endPrefixMapping(PREFIX);
writer.endDocument();
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_TRANSFER_MAINIFEST, PREFIX + ":"
+ ManifestModel.LOCALNAME_TRANSFER_MAINIFEST);
writer.endPrefixMapping(PREFIX);
writer.endDocument();
}
/**
@@ -107,27 +113,41 @@ public class XMLTransferManifestWriter implements TransferManifestWriter
*/
public void writeTransferManifestHeader(TransferManifestHeader header) throws SAXException
{
if(header.getCreatedDate() != null)
if (header.getCreatedDate() != null)
{
// Start Header
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_TRANSFER_HEADER, PREFIX + ":" + ManifestModel.LOCALNAME_TRANSFER_HEADER, EMPTY_ATTRIBUTES);
// Created Date
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_HEADER_CREATED_DATE, PREFIX + ":" + ManifestModel.LOCALNAME_HEADER_CREATED_DATE, EMPTY_ATTRIBUTES);
writeDate(header.getCreatedDate());
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_HEADER_CREATED_DATE, PREFIX + ":" + ManifestModel.LOCALNAME_HEADER_CREATED_DATE);
// Node count
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_HEADER_NODE_COUNT, PREFIX + ":" + ManifestModel.LOCALNAME_HEADER_NODE_COUNT, EMPTY_ATTRIBUTES);
char[] nodeCountChars = Integer.toString(header.getNodeCount()).toCharArray();
writer.characters(nodeCountChars, 0, nodeCountChars.length);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_HEADER_NODE_COUNT, PREFIX + ":" + ManifestModel.LOCALNAME_HEADER_NODE_COUNT);
// End Header
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_TRANSFER_HEADER, PREFIX + ":" + ManifestModel.LOCALNAME_TRANSFER_HEADER);
// Start Header
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_TRANSFER_HEADER, PREFIX + ":"
+ ManifestModel.LOCALNAME_TRANSFER_HEADER, EMPTY_ATTRIBUTES);
// Created Date
writer
.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_HEADER_CREATED_DATE, PREFIX + ":"
+ ManifestModel.LOCALNAME_HEADER_CREATED_DATE,
EMPTY_ATTRIBUTES);
writeDate(header.getCreatedDate());
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_HEADER_CREATED_DATE, PREFIX + ":"
+ ManifestModel.LOCALNAME_HEADER_CREATED_DATE);
// Node count
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_HEADER_NODE_COUNT, PREFIX + ":"
+ ManifestModel.LOCALNAME_HEADER_NODE_COUNT, EMPTY_ATTRIBUTES);
char[] nodeCountChars = Integer.toString(header.getNodeCount()).toCharArray();
writer.characters(nodeCountChars, 0, nodeCountChars.length);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_HEADER_NODE_COUNT, PREFIX + ":"
+ ManifestModel.LOCALNAME_HEADER_NODE_COUNT);
// End Header
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_TRANSFER_HEADER, PREFIX + ":"
+ ManifestModel.LOCALNAME_TRANSFER_HEADER);
}
}
/**
* Write a deleted node to the manifest file
*
@@ -137,177 +157,225 @@ public class XMLTransferManifestWriter implements TransferManifestWriter
public void writeTransferManifestNode(TransferManifestDeletedNode node) throws SAXException
{
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute("uri", "nodeRef", "nodeRef", "String", node.getNodeRef().toString());
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_NODE, PREFIX + ":" +ManifestModel.LOCALNAME_ELEMENT_DELETED_NODE, attributes);
if(node.getPrimaryParentAssoc() != null)
attributes
.addAttribute("uri", "nodeRef", "nodeRef", "String", node.getNodeRef()
.toString());
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_NODE, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_DELETED_NODE, attributes);
if (node.getPrimaryParentAssoc() != null)
{
writePrimaryParent(node.getPrimaryParentAssoc(), node.getParentPath());
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_NODE, PREFIX + ":" +ManifestModel.LOCALNAME_ELEMENT_DELETED_NODE);
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_NODE, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_DELETED_NODE);
}
public void writeTransferManifestNode(TransferManifestNode node) throws SAXException
{
if(node instanceof TransferManifestDeletedNode)
if (node instanceof TransferManifestDeletedNode)
{
TransferManifestDeletedNode node2 = (TransferManifestDeletedNode)node;
TransferManifestDeletedNode node2 = (TransferManifestDeletedNode) node;
writeTransferManifestNode(node2);
}
else if(node instanceof TransferManifestNormalNode)
else if (node instanceof TransferManifestNormalNode)
{
TransferManifestNormalNode node2 = (TransferManifestNormalNode)node;
TransferManifestNormalNode node2 = (TransferManifestNormalNode) node;
writeTransferManifestNode(node2);
}
else
{
throw new IllegalArgumentException("Unexpected type" + node.getClass().getName());
throw new IllegalArgumentException("Unexpected type" + node.getClass().getName());
}
}
/**
* Write a normal transfer manifest node
*
* @param nodeRef
* @throws SAXException
*/
public void writeTransferManifestNode(TransferManifestNormalNode node) throws SAXException
{
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute("uri", "nodeRef", "nodeRef", "String", node.getNodeRef().toString());
attributes.addAttribute("uri", "nodeType", "nodeType", "String", formatQName(node.getType()));
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_NODE, PREFIX + ":" +ManifestModel.LOCALNAME_ELEMENT_NODE, attributes);
if(node.getPrimaryParentAssoc() != null)
attributes
.addAttribute("uri", "nodeRef", "nodeRef", "String", node.getNodeRef()
.toString());
attributes.addAttribute("uri", "nodeType", "nodeType", "String",
formatQName(node.getType()));
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_NODE, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_NODE, attributes);
if (node.getPrimaryParentAssoc() != null)
{
writePrimaryParent(node.getPrimaryParentAssoc(), node.getParentPath());
}
}
writeAspects(node.getAspects());
writeProperties(node.getProperties());
writeParentAssocs(node.getParentAssocs());
writeChildAssocs(node.getChildAssocs());
writeTargetAssocs(node.getTargetAssocs());
writeSourceAssocs(node.getSourceAssocs());
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_NODE, PREFIX + ":" +ManifestModel.LOCALNAME_ELEMENT_NODE);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_NODE, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_NODE);
}
private void writeProperties(Map<QName, Serializable> properties) throws SAXException
{
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PROPERTIES, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PROPERTIES, EMPTY_ATTRIBUTES);
if(properties != null )
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PROPERTIES, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PROPERTIES, EMPTY_ATTRIBUTES);
if (properties != null)
{
for(Entry<QName, Serializable> entry : properties.entrySet())
for (Entry<QName, Serializable> entry : properties.entrySet())
{
writeProperty(entry.getKey(), entry.getValue());
}
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PROPERTIES, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PROPERTIES);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PROPERTIES, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PROPERTIES);
}
private void writeProperty(QName name, Serializable value) throws SAXException
{
{
{
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "name", "name", "String", formatQName(name));
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PROPERTY, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PROPERTY, attributes);
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "name", "name", "String",
formatQName(name));
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PROPERTY, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PROPERTY, attributes);
}
if(value == null)
if (value == null)
{
writeNullValue();
}
else if(value instanceof ContentData)
else if (value instanceof ContentData)
{
ContentData data = (ContentData)value;
ContentData data = (ContentData) value;
AttributesImpl dataAttributes = new AttributesImpl();
dataAttributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "contentURL","contentURL", "String", data.getContentUrl());
dataAttributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "mimetype", "mimetype", "String", data.getMimetype());
dataAttributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "size", "size", "String", Long.toString(data.getSize()));
dataAttributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "encoding", "encoding", "String", data.getEncoding());
dataAttributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "locale", "locale", "String", data.getLocale().toString());
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_CONTENT_HEADER, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_CONTENT_HEADER, dataAttributes);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_CONTENT_HEADER, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_CONTENT_HEADER);
dataAttributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "contentURL",
"contentURL", "String", data.getContentUrl());
dataAttributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "mimetype",
"mimetype", "String", data.getMimetype());
dataAttributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "size", "size",
"String", Long.toString(data.getSize()));
dataAttributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "encoding",
"encoding", "String", data.getEncoding());
dataAttributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "locale", "locale",
"String", data.getLocale().toString());
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_CONTENT_HEADER, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_CONTENT_HEADER,
dataAttributes);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_CONTENT_HEADER, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_CONTENT_HEADER);
}
else if(value instanceof Collection)
else if (value instanceof Collection)
{
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_VALUES, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_VALUES, EMPTY_ATTRIBUTES);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_VALUES, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_VALUES, EMPTY_ATTRIBUTES);
int index = 0;
for (Object valueInCollection : (Collection)value)
for (Object valueInCollection : (Collection) value)
{
writeValue((Serializable)valueInCollection);
writeValue((Serializable) valueInCollection);
index++;
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_VALUES, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_VALUES);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_VALUES, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_VALUES);
}
else if(value instanceof MLText)
else if (value instanceof MLText)
{
MLText mltext = (MLText)value;
for(Entry<Locale, String> entry : mltext.entrySet())
MLText mltext = (MLText) value;
for (Entry<Locale, String> entry : mltext.entrySet())
{
writeMLValue(entry.getKey(), entry.getValue());
writeMLValue(entry.getKey(), entry.getValue());
}
}
else
{
writeValue(value);
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PROPERTY, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PROPERTY);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PROPERTY, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PROPERTY);
}
private void writeValue(Serializable value) throws SAXException
{
try
{
String strValue = (String)DefaultTypeConverter.INSTANCE.convert(String.class, value);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_VALUE_STRING, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_VALUE_STRING, EMPTY_ATTRIBUTES);
String strValue = (String) DefaultTypeConverter.INSTANCE.convert(String.class, value);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_VALUE_STRING, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_VALUE_STRING,
EMPTY_ATTRIBUTES);
writer.characters(strValue.toCharArray(), 0, strValue.length());
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_VALUE_STRING, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_VALUE_STRING);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_VALUE_STRING, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_VALUE_STRING);
}
catch (TypeConversionException e)
{
/**
* Can't convert this to a string for transmission
*
* Need to serialize the Java Object
* Can't convert this to a string for transmission Need to serialize
* the Java Object
*/
try
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
{
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos;
oos = new ObjectOutputStream(bos);
oos.writeObject(value);
oos.close();
byte[] ba = bos.toByteArray();
String s = new String(Base64.encodeBytes(ba));
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "className", "className", "String", value.getClass().getName());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "encoding", "encoding", "String", "base64/ObjectOutputStream");
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_VALUE_SERIALIZED, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_VALUE_SERIALIZED, attributes);
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "className",
"className", "String", value.getClass().getName());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "encoding",
"encoding", "String", "base64/ObjectOutputStream");
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_VALUE_SERIALIZED, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_VALUE_SERIALIZED,
attributes);
writer.startCDATA();
writer.characters(s.toCharArray(), 0, s.length());
writer.endCDATA();
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_VALUE_SERIALIZED, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_VALUE_SERIALIZED);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_VALUE_SERIALIZED, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_VALUE_SERIALIZED);
}
catch (IOException err)
{
@@ -315,170 +383,240 @@ public class XMLTransferManifestWriter implements TransferManifestWriter
}
}
}
private void writeNullValue() throws SAXException
{
AttributesImpl attributes = new AttributesImpl();
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_VALUE_NULL, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_VALUE_NULL, attributes);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_VALUE_NULL, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_VALUE_NULL);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_VALUE_NULL, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_VALUE_NULL, attributes);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_VALUE_NULL, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_VALUE_NULL);
}
private void writeMLValue(Locale locale, Serializable value) throws SAXException
{
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "locale", "locale", "String", locale.toString());
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_MLVALUE, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_MLVALUE, attributes);
String strValue = (String)DefaultTypeConverter.INSTANCE.convert(String.class, value);
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "locale", "locale", "String",
locale.toString());
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_MLVALUE, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_MLVALUE, attributes);
String strValue = (String) DefaultTypeConverter.INSTANCE.convert(String.class, value);
writer.characters(strValue.toCharArray(), 0, strValue.length());
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_MLVALUE, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_MLVALUE);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_MLVALUE, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_MLVALUE);
}
private void writeAspects(Set<QName> aspects) throws SAXException
{
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_ASPECTS, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_ASPECTS, EMPTY_ATTRIBUTES);
if(aspects != null)
{
for(QName aspect : aspects)
{
writeAspect(aspect);
}
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_ASPECTS, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_ASPECTS);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_ASPECTS, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_ASPECTS, EMPTY_ATTRIBUTES);
if (aspects != null)
{
for (QName aspect : aspects)
{
writeAspect(aspect);
}
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_ASPECTS, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_ASPECTS);
}
private void writeAspect(QName aspect) throws SAXException
{
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_ASPECT, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_ASPECT, EMPTY_ATTRIBUTES);
String name=formatQName(aspect);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_ASPECT, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_ASPECT, EMPTY_ATTRIBUTES);
String name = formatQName(aspect);
writer.characters(name.toCharArray(), 0, name.length());
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_ASPECT, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_ASPECT);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_ASPECT, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_ASPECT);
}
private void writeDate(Date date) throws SAXException
{
String dates = ISO8601DateFormat.format(date);
writer.characters(dates.toCharArray(), 0, dates.length());
}
private String formatQName(QName qname)
{
return qname.toString();
}
private void writePrimaryParent(ChildAssociationRef parentAssoc, Path parentPath) throws SAXException
{
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PARENT, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PARENT, EMPTY_ATTRIBUTES);
private void writePrimaryParent(ChildAssociationRef parentAssoc, Path parentPath)
throws SAXException
{
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PARENT, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PARENT, EMPTY_ATTRIBUTES);
writeParentAssoc(parentAssoc);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PATH, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PATH, EMPTY_ATTRIBUTES);
if(parentPath != null)
{
String path = parentPath.toString();
writer.characters(path.toCharArray(), 0, path.length());
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PATH, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PATH);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PARENT, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PARENT);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PATH, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PATH, EMPTY_ATTRIBUTES);
if (parentPath != null)
{
String path = parentPath.toString();
writer.characters(path.toCharArray(), 0, path.length());
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PATH, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PATH);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PARENT, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PRIMARY_PARENT);
}
private void writeParentAssocs(List<ChildAssociationRef> refs) throws SAXException
{
if(refs != null)
if (refs != null)
{
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS, EMPTY_ATTRIBUTES);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS,
EMPTY_ATTRIBUTES);
for(ChildAssociationRef assoc : refs)
for (ChildAssociationRef assoc : refs)
{
writeParentAssoc(assoc);
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOCS);
}
}
private void writeChildAssocs(List<ChildAssociationRef> refs) throws SAXException
{
if(refs != null)
if (refs != null)
{
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOCS, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOCS, EMPTY_ATTRIBUTES);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOCS, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOCS,
EMPTY_ATTRIBUTES);
for(ChildAssociationRef assoc : refs)
for (ChildAssociationRef assoc : refs)
{
writeChildAssoc(assoc);
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOCS, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOCS);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOCS, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOCS);
}
}
private void writeParentAssoc(ChildAssociationRef assoc) throws SAXException
{
if(assoc != null)
if (assoc != null)
{
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "from", "from", "String", assoc.getParentRef().toString());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "type", "type", "String", formatQName(assoc.getTypeQName()));
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "type", "isPrimary", "Boolean", assoc.isPrimary()?"true":"false");
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOC, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOC, attributes);
String name= formatQName(assoc.getQName());
writer.characters(name.toCharArray(), 0, name.length());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "from", "from", "String",
assoc.getParentRef().toString());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "type", "type", "String",
formatQName(assoc.getTypeQName()));
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "type", "isPrimary",
"Boolean", assoc.isPrimary() ? "true" : "false");
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOC, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOC, attributes);
String name = formatQName(assoc.getQName());
writer.characters(name.toCharArray(), 0, name.length());
assoc.isPrimary();
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOC, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOC);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOC, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_PARENT_ASSOC);
}
}
private void writeChildAssoc(ChildAssociationRef assoc) throws SAXException
{
if(assoc != null)
if (assoc != null)
{
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "to", "to", "String", assoc.getChildRef().toString());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "type", "type", "String", formatQName(assoc.getTypeQName()));
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "type", "isPrimary", "Boolean", assoc.isPrimary()?"true":"false");
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOC, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOC, attributes);
String name= formatQName(assoc.getQName());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "to", "to", "String",
assoc.getChildRef().toString());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "type", "type", "String",
formatQName(assoc.getTypeQName()));
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "type", "isPrimary",
"Boolean", assoc.isPrimary() ? "true" : "false");
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOC, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOC, attributes);
String name = formatQName(assoc.getQName());
writer.characters(name.toCharArray(), 0, name.length());
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOC, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOC);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOC, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_CHILD_ASSOC);
}
}
private void writeTargetAssocs(List<AssociationRef> refs) throws SAXException
{
if(refs != null)
if (refs != null)
{
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_TARGET_ASSOCS, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_TARGET_ASSOCS, EMPTY_ATTRIBUTES);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_TARGET_ASSOCS, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_TARGET_ASSOCS,
EMPTY_ATTRIBUTES);
for(AssociationRef assoc : refs)
for (AssociationRef assoc : refs)
{
writeAssoc(assoc);
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_TARGET_ASSOCS, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_TARGET_ASSOCS);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_TARGET_ASSOCS, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_TARGET_ASSOCS);
}
}
private void writeSourceAssocs(List<AssociationRef> refs) throws SAXException
{
if(refs != null)
if (refs != null)
{
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_SOURCE_ASSOCS, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_SOURCE_ASSOCS, EMPTY_ATTRIBUTES);
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_SOURCE_ASSOCS, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_SOURCE_ASSOCS,
EMPTY_ATTRIBUTES);
for(AssociationRef assoc : refs)
for (AssociationRef assoc : refs)
{
writeAssoc(assoc);
}
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_SOURCE_ASSOCS, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_SOURCE_ASSOCS);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_SOURCE_ASSOCS, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_SOURCE_ASSOCS);
}
}
private void writeAssoc(AssociationRef ref) throws SAXException
{
AttributesImpl attributes = new AttributesImpl();
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "source", "source", "String", ref.getSourceRef().toString());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "target", "target", "String", ref.getTargetRef().toString());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "type", "type", "String", formatQName(ref.getTypeQName()));
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_ASSOC, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_ASSOC, attributes);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI, ManifestModel.LOCALNAME_ELEMENT_ASSOC, PREFIX + ":" + ManifestModel.LOCALNAME_ELEMENT_ASSOC);
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "source", "source", "String",
ref.getSourceRef().toString());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "target", "target", "String",
ref.getTargetRef().toString());
attributes.addAttribute(TransferModel.TRANSFER_MODEL_1_0_URI, "type", "type", "String",
formatQName(ref.getTypeQName()));
writer.startElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_ASSOC, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_ASSOC, attributes);
writer.endElement(TransferModel.TRANSFER_MODEL_1_0_URI,
ManifestModel.LOCALNAME_ELEMENT_ASSOC, PREFIX + ":"
+ ManifestModel.LOCALNAME_ELEMENT_ASSOC);
}
}

View File

@@ -18,8 +18,6 @@
*/
package org.alfresco.service.cmr.transfer;
import java.io.Serializable;
/**
* The transfer callback is called during a transfer, it allows the real-time feedback of
* an in progress transfer. It can be used to populate a deployment report or to display
@@ -27,7 +25,7 @@ import java.io.Serializable;
*
* @author Mark Rogers
*/
public interface TransferCallback extends Serializable
public interface TransferCallback
{
/**
* processEvent

View File

@@ -38,15 +38,7 @@ public interface TransferTarget
* @return
*/
public String getName();
/**
* Set the name of this transfer target. Please note that you can't update the name of a
* transfer target.
*
* @param name
*/
public void setName(String name);
/**
* Get the description for this transfer target
* @return