From 46f2fe2812cfe96f83e2a2ba717bfd423f753001 Mon Sep 17 00:00:00 2001 From: Mark Rogers Date: Wed, 3 Mar 2010 15:10:31 +0000 Subject: [PATCH] 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 --- .../messages/transfer-service.properties | 4 +- .../transfer/HttpClientTransmitterImpl.java | 58 -- .../repo/transfer/TransferEventImpl.java | 24 +- .../repo/transfer/TransferMessage.java | 25 - .../repo/transfer/TransferServiceImpl.java | 23 +- .../transfer/TransferServiceImplTest.java | 1 - .../repo/transfer/TransferTransmitter.java | 6 - .../UnitTestInProcessTransmitterImpl.java | 5 - .../manifest/XMLTransferManifestReader.java | 50 +- .../manifest/XMLTransferManifestWriter.java | 542 +++++++++++------- .../cmr/transfer/TransferCallback.java | 4 +- .../service/cmr/transfer/TransferTarget.java | 10 +- 12 files changed, 401 insertions(+), 351 deletions(-) delete mode 100644 source/java/org/alfresco/repo/transfer/TransferMessage.java diff --git a/config/alfresco/messages/transfer-service.properties b/config/alfresco/messages/transfer-service.properties index c2e4e0e5d9..5a29c96512 100644 --- a/config/alfresco/messages/transfer-service.properties +++ b/config/alfresco/messages/transfer-service.properties @@ -22,4 +22,6 @@ transfer_service.receiver.error_staging_content= transfer_service.receiver.no_snapshot_received= transfer_service.receiver.error_committing_transfer= transfer_service.receiver.transfer_not_found=Failed to find any record of requested transfer: {0} -transfer_service.receiver.transfer_cancelled=Transfer has been cancelled: {0} \ No newline at end of file +transfer_service.receiver.transfer_cancelled=Transfer has been cancelled: {0} +transfer_service.no_encoding=Unable to deserialize value, no transfermation for encoding {0} +transfer_service.unable_to_deserialise=Unable to deserialize value \ No newline at end of file diff --git a/source/java/org/alfresco/repo/transfer/HttpClientTransmitterImpl.java b/source/java/org/alfresco/repo/transfer/HttpClientTransmitterImpl.java index 3eedb8df8d..bdf85f19ff 100644 --- a/source/java/org/alfresco/repo/transfer/HttpClientTransmitterImpl.java +++ b/source/java/org/alfresco/repo/transfer/HttpClientTransmitterImpl.java @@ -491,64 +491,6 @@ public class HttpClientTransmitterImpl implements TransferTransmitter postContentRequest.releaseConnection(); } } // end of sendContent - - - /** - * - */ - public Set getMessages(Transfer transfer) - { - // TODO How to signal last message ? return null rather than empty - Set messages = new HashSet(); - - 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(); - } - } /** * diff --git a/source/java/org/alfresco/repo/transfer/TransferEventImpl.java b/source/java/org/alfresco/repo/transfer/TransferEventImpl.java index 901dbef786..3fddea80bf 100644 --- a/source/java/org/alfresco/repo/transfer/TransferEventImpl.java +++ b/source/java/org/alfresco/repo/transfer/TransferEventImpl.java @@ -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; } diff --git a/source/java/org/alfresco/repo/transfer/TransferMessage.java b/source/java/org/alfresco/repo/transfer/TransferMessage.java deleted file mode 100644 index 1907c68768..0000000000 --- a/source/java/org/alfresco/repo/transfer/TransferMessage.java +++ /dev/null @@ -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 . - */ -package org.alfresco.repo.transfer; - -public interface TransferMessage -{ - String getMessage(); - -} diff --git a/source/java/org/alfresco/repo/transfer/TransferServiceImpl.java b/source/java/org/alfresco/repo/transfer/TransferServiceImpl.java index 2b481d625e..16522684eb 100644 --- a/source/java/org/alfresco/repo/transfer/TransferServiceImpl.java +++ b/source/java/org/alfresco/repo/transfer/TransferServiceImpl.java @@ -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 params = new HashMap(); params.put("targetName", targetName); diff --git a/source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java b/source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java index 0bc271799d..1a235d2f96 100644 --- a/source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java +++ b/source/java/org/alfresco/repo/transfer/TransferServiceImplTest.java @@ -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); diff --git a/source/java/org/alfresco/repo/transfer/TransferTransmitter.java b/source/java/org/alfresco/repo/transfer/TransferTransmitter.java index 70b9e6523e..fbf82dff6e 100644 --- a/source/java/org/alfresco/repo/transfer/TransferTransmitter.java +++ b/source/java/org/alfresco/repo/transfer/TransferTransmitter.java @@ -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 getMessages(Transfer transfer); } \ No newline at end of file diff --git a/source/java/org/alfresco/repo/transfer/UnitTestInProcessTransmitterImpl.java b/source/java/org/alfresco/repo/transfer/UnitTestInProcessTransmitterImpl.java index d9a96162c2..564d27fec0 100644 --- a/source/java/org/alfresco/repo/transfer/UnitTestInProcessTransmitterImpl.java +++ b/source/java/org/alfresco/repo/transfer/UnitTestInProcessTransmitterImpl.java @@ -100,11 +100,6 @@ public class UnitTestInProcessTransmitterImpl implements TransferTransmitter }, false, true); } - public Set getMessages(Transfer transfer) - { - String transferId = transfer.getTransferId(); - return null; - } public void prepare(Transfer transfer) throws TransferException { diff --git a/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java b/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java index b3e59572e9..5736823e8d 100644 --- a/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java +++ b/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestReader.java @@ -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 documentNamespaces = new HashMap(); - + */ + LinkedList> namespaces = new LinkedList>(); final String TRANSFER_URI = ManifestModel.TRANSFER_MODEL_1_0_URI; final String XMLNS_URI = "http://www.w3.org/XML/1998/namespace"; - LinkedList> namespaces = new LinkedList>(); 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 values = (Collection)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); } } diff --git a/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestWriter.java b/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestWriter.java index 951c642b8d..a1163b08d1 100644 --- a/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestWriter.java +++ b/source/java/org/alfresco/repo/transfer/manifest/XMLTransferManifestWriter.java @@ -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 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 entry : properties.entrySet()) + for (Entry 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 entry : mltext.entrySet()) + MLText mltext = (MLText) value; + for (Entry 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 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 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 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 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 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); } } diff --git a/source/java/org/alfresco/service/cmr/transfer/TransferCallback.java b/source/java/org/alfresco/service/cmr/transfer/TransferCallback.java index 12083385de..cb2cc00122 100644 --- a/source/java/org/alfresco/service/cmr/transfer/TransferCallback.java +++ b/source/java/org/alfresco/service/cmr/transfer/TransferCallback.java @@ -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 diff --git a/source/java/org/alfresco/service/cmr/transfer/TransferTarget.java b/source/java/org/alfresco/service/cmr/transfer/TransferTarget.java index a8651bd6c3..c004c0525c 100644 --- a/source/java/org/alfresco/service/cmr/transfer/TransferTarget.java +++ b/source/java/org/alfresco/service/cmr/transfer/TransferTarget.java @@ -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