Prechádzať zdrojové kódy

[jasperserver axis] 实现复制接口

sunyj 8 rokov pred
rodič
commit
5e352969f7

+ 20 - 6
src/main/java/com/uas/report/axis/BasicResourceHandler.java

@@ -56,7 +56,11 @@ public class BasicResourceHandler implements ResourceHandler {
 	}
 
 	public ResourceDescriptor locateResourceDescriptor(String resourceURI) throws FileNotFoundException, IOException {
-		return toResourceDescriptor(locateResource(getFile(resourceURI)));
+		return locateResourceDescriptor(getFile(resourceURI));
+	}
+
+	public ResourceDescriptor locateResourceDescriptor(File file) throws FileNotFoundException, IOException {
+		return toResourceDescriptor(locateResource(file));
 	}
 
 	private Resource locateResource(File file) throws FileNotFoundException, IOException {
@@ -277,18 +281,23 @@ public class BasicResourceHandler implements ResourceHandler {
 
 	@Override
 	public void delete(ResourceDescriptor descriptor) throws IOException {
-		// default implementation does nothing
+		File file = checkFile(descriptor.getUriString());
+		FileUtils.delete(file, true);
 	}
 
 	@Override
 	public void move(ResourceDescriptor descriptor, String destinationURI) throws IOException {
-		// default implementation does nothing
+		File file = checkFile(descriptor.getUriString());
+		FileUtils.move(file, new File(getFile(destinationURI), file.getName()));
 	}
 
 	@Override
-	public ResourceDescriptor copy(Request request) {
-		// default implementation does nothing
-		return null;
+	public ResourceDescriptor copy(ResourceDescriptor descriptor, String destinationURI) throws IOException {
+		File file = checkFile(descriptor.getUriString());
+		// 与move操作的destinationURI不一样
+		File dest = getFile(destinationURI);
+		FileUtils.copy(file, dest);
+		return locateResourceDescriptor(dest);
 	}
 
 	@Override
@@ -298,6 +307,11 @@ public class BasicResourceHandler implements ResourceHandler {
 		return null;
 	}
 
+	protected File checkFile(String uriString) throws IOException {
+		// default implementation does nothing
+		return null;
+	}
+
 	public String getDestinationURI(Request request) throws WSException {
 		String destinationURI = request.getArgumentValue(Argument.DESTINATION_URI);
 		if (destinationURI == null) {

+ 3 - 14
src/main/java/com/uas/report/axis/FileResourceHandler.java

@@ -8,8 +8,6 @@ import java.util.Map;
 import javax.activation.DataSource;
 import javax.activation.FileDataSource;
 
-import com.uas.report.util.FileUtils;
-
 public class FileResourceHandler extends BasicResourceHandler {
 
 	@Override
@@ -38,20 +36,11 @@ public class FileResourceHandler extends BasicResourceHandler {
 	}
 
 	@Override
-	public void delete(ResourceDescriptor descriptor) throws IOException {
-		File file = getFile(descriptor.getUriString());
-		if (file.isDirectory()) {
-			throw new IOException("资源为文件夹!");
-		}
-		FileUtils.delete(file);
-	}
-
-	@Override
-	public void move(ResourceDescriptor descriptor, String destinationURI) throws IOException {
-		File file = getFile(descriptor.getUriString());
+	protected File checkFile(String uriString) throws IOException {
+		File file = getFile(uriString);
 		if (file.isDirectory()) {
 			throw new IOException("资源为文件夹!");
 		}
-		FileUtils.move(file, new File(getFile(destinationURI), file.getName()));
+		return file;
 	}
 }

+ 3 - 14
src/main/java/com/uas/report/axis/FolderHandler.java

@@ -3,8 +3,6 @@ package com.uas.report.axis;
 import java.io.File;
 import java.io.IOException;
 
-import com.uas.report.util.FileUtils;
-
 public class FolderHandler extends BasicResourceHandler {
 
 	@Override
@@ -13,20 +11,11 @@ public class FolderHandler extends BasicResourceHandler {
 	}
 
 	@Override
-	public void delete(ResourceDescriptor descriptor) throws IOException {
-		File file = getFile(descriptor.getUriString());
-		if (!file.isDirectory()) {
-			throw new IOException("资源并非文件夹!");
-		}
-		FileUtils.deleteDir(file, true);
-	}
-
-	@Override
-	public void move(ResourceDescriptor descriptor, String destinationURI) throws IOException {
-		File file = getFile(descriptor.getUriString());
+	protected File checkFile(String uriString) throws IOException {
+		File file = getFile(uriString);
 		if (!file.isDirectory()) {
 			throw new IOException("资源并非文件夹!");
 		}
-		FileUtils.move(file, new File(getFile(destinationURI), file.getName()));
+		return file;
 	}
 }

+ 4 - 0
src/main/java/com/uas/report/axis/OperationResult.java

@@ -36,6 +36,10 @@ public class OperationResult {
 		this.resourceDescriptors = resourceDescriptors;
 	}
 
+	public void addResourceDescriptor(ResourceDescriptor descriptor) {
+		resourceDescriptors.add(descriptor);
+	}
+
 	public String getVersion() {
 		return version;
 	}

+ 1 - 1
src/main/java/com/uas/report/axis/ResourceHandler.java

@@ -16,7 +16,7 @@ public interface ResourceHandler {
 
 	public void move(ResourceDescriptor descriptor, String destinationURI) throws IOException;
 
-	public ResourceDescriptor copy(Request request);
+	public ResourceDescriptor copy(ResourceDescriptor descriptor, String destinationURI) throws IOException;
 
 	public Map<String, DataSource> getAttachments(Map<String, String> arguments, ResourceDescriptor descriptor)
 			throws WSException;

+ 50 - 9
src/main/java/com/uas/report/axis/repository/RepositoryManagementServiceImpl.java

@@ -434,8 +434,8 @@ public class RepositoryManagementServiceImpl implements RepositoryManagementServ
 
 	@Override
 	public String move(String requestXmlString) {
-		OperationResult or = new OperationResult();
-		or.setVersion(VERSION);
+		OperationResult operationResult = new OperationResult();
+		operationResult.setVersion(VERSION);
 		// or.setReturnCode(OperationResult.SUCCESS);
 		try {
 			// Request request = (Request)
@@ -464,23 +464,64 @@ public class RepositoryManagementServiceImpl implements RepositoryManagementServ
 			// addExceptionToAllAuditEvents(new Exception(or.getMessage()));
 			// }
 		} catch (WSException e) {
-			or.setReturnCode(e.getErrorCode());
-			or.setMessage(e.getMessage());
+			operationResult.setReturnCode(e.getErrorCode());
+			operationResult.setMessage(e.getMessage());
 			// addExceptionToAllAuditEvents(e);
 		} catch (Exception e) {
 			logger.error(e.getMessage(), e);
-			or.setReturnCode(1);
-			or.setMessage(e.getMessage());
+			operationResult.setReturnCode(1);
+			operationResult.setMessage(e.getMessage());
 			// addExceptionToAllAuditEvents(e);
 		}
 
-		return marshalResponse(or);
+		return marshalResponse(operationResult);
 	}
 
 	@Override
 	public String copy(String requestXmlString) {
-		// TODO Auto-generated method stub
-		return null;
+		OperationResult operationResult = new OperationResult();
+		operationResult.setVersion(VERSION);
+		// or.setReturnCode(OperationResult.SUCCESS);
+		try {
+			// Request request = (Request)
+			// Unmarshaller.unmarshalXml(requestXmlString);
+			StringReader xmlStringReader = new StringReader(requestXmlString);
+			Request request = (Request) Unmarshaller.unmarshal(xmlStringReader);
+			// createAuditEvent(request.getOperationName(),
+			// request.getResourceDescriptor().getWsType(),
+			// request.getResourceDescriptor().getIsNew());
+			setLocale(request.getLocale());
+
+			// ResourceDescriptor resource =
+			// createRequestResourceDescriptor(request);
+			ResourceDescriptor resourceDescriptor = basicResourceHandler
+					.locateResourceDescriptor(request.getResourceDescriptor().getUriString());
+			String wsType = resourceDescriptor.getWsType();
+			if (logger.isDebugEnabled()) {
+				logger.debug("Copy WS type: " + wsType);
+			}
+			// ResourceHandler handler =
+			// getHandlerRegistry().getHandler(wsType);
+			// handler.copy(request, this);
+			BasicResourceHandler handler = resourceHandlerRegistry.getHandler(wsType);
+			ResourceDescriptor copyDescriptor = handler.copy(resourceDescriptor,
+					basicResourceHandler.getDestinationURI(request));
+			operationResult.addResourceDescriptor(copyDescriptor);
+			// if (or.getReturnCode() != 0) {
+			// addExceptionToAllAuditEvents(new Exception(or.getMessage()));
+			// }
+		} catch (WSException e) {
+			operationResult.setReturnCode(e.getErrorCode());
+			operationResult.setMessage(e.getMessage());
+			// addExceptionToAllAuditEvents(e);
+		} catch (Exception e) {
+			logger.error(e.getMessage(), e);
+			operationResult.setReturnCode(1);
+			operationResult.setMessage(e.getMessage());
+			// addExceptionToAllAuditEvents(e);
+		}
+
+		return marshalResponse(operationResult);
 	}
 
 	/**