Selaa lähdekoodia

[jasperserver axis] 实现删除接口

sunyj 8 vuotta sitten
vanhempi
commit
2140d3a79d

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

@@ -2,6 +2,7 @@ package com.uas.report.axis;
 
 public class Argument {
 
+	public static final String MODIFY_REPORTUNIT = "MODIFY_REPORTUNIT_URI";
 	public static final String LIST_DATASOURCES = "LIST_DATASOURCES";
 
 	public static final String VALUE_TRUE = "true";

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

@@ -55,6 +55,10 @@ public class BasicResourceHandler implements ResourceHandler {
 		return locateResource(getFile(resourceURI));
 	}
 
+	public ResourceDescriptor locateResourceDescriptor(String resourceURI) throws FileNotFoundException, IOException {
+		return toResourceDescriptor(locateResource(getFile(resourceURI)));
+	}
+
 	private Resource locateResource(File file) throws FileNotFoundException, IOException {
 		if (file == null || !file.exists() || !filter.accept(file)) {
 			return null;
@@ -121,6 +125,9 @@ public class BasicResourceHandler implements ResourceHandler {
 	}
 
 	public ResourceDescriptor toResourceDescriptor(Resource resource) {
+		if (resource == null) {
+			return null;
+		}
 		ResourceDescriptor resourceDescriptor = new ResourceDescriptor();
 		if (resource instanceof Folder) {
 			resourceDescriptor.setWsType(ResourceDescriptor.TYPE_FOLDER);
@@ -142,6 +149,9 @@ public class BasicResourceHandler implements ResourceHandler {
 	}
 
 	public Resource toResource(ResourceDescriptor resourceDescriptor) {
+		if (resourceDescriptor == null) {
+			return null;
+		}
 		Resource resource = null;
 		String wsType = resourceDescriptor.getWsType();
 		if (wsType.equals(ResourceDescriptor.TYPE_FOLDER)) {
@@ -265,11 +275,27 @@ public class BasicResourceHandler implements ResourceHandler {
 		return resourceDescriptor;
 	}
 
+	@Override
+	public void delete(ResourceDescriptor descriptor) throws IOException {
+		// default implementation does nothing
+	}
+
+	@Override
+	public ResourceDescriptor move(Request request) {
+		// default implementation does nothing
+		return null;
+	}
+
+	@Override
+	public ResourceDescriptor copy(Request request) {
+		// default implementation does nothing
+		return null;
+	}
+
 	@Override
 	public Map<String, DataSource> getAttachments(Map<String, String> arguments, ResourceDescriptor descriptor)
 			throws WSException {
 		// default implementation does nothing
 		return null;
 	}
-
 }

+ 2 - 2
src/main/java/com/uas/report/axis/FileResource.java

@@ -5,7 +5,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
 
-import com.uas.report.axis.util.StreamUtil;
+import com.uas.report.util.FileUtils;
 
 public class FileResource extends Resource {
 
@@ -38,7 +38,7 @@ public class FileResource extends Resource {
 	}
 
 	public void readData(InputStream is) throws IOException {
-		setData(StreamUtil.readData(is));
+		setData(FileUtils.readData(is));
 	}
 
 	public InputStream getDataStream() {

+ 13 - 0
src/main/java/com/uas/report/axis/FileResourceHandler.java

@@ -1,11 +1,15 @@
 package com.uas.report.axis;
 
+import java.io.File;
+import java.io.IOException;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
 import javax.activation.DataSource;
 import javax.activation.FileDataSource;
 
+import com.uas.report.util.FileUtils;
+
 public class FileResourceHandler extends BasicResourceHandler {
 
 	@Override
@@ -32,4 +36,13 @@ public class FileResourceHandler extends BasicResourceHandler {
 		}
 		return attachments;
 	}
+
+	@Override
+	public void delete(ResourceDescriptor descriptor) throws IOException {
+		File file = getFile(descriptor.getUriString());
+		if (file.isDirectory()) {
+			throw new IOException("资源为文件夹!");
+		}
+		FileUtils.delete(file);
+	}
 }

+ 16 - 0
src/main/java/com/uas/report/axis/FolderHandler.java

@@ -1,5 +1,10 @@
 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
@@ -7,4 +12,15 @@ public class FolderHandler extends BasicResourceHandler {
 		return Folder.class;
 	}
 
+	@Override
+	public void delete(ResourceDescriptor descriptor) throws IOException {
+		if (descriptor == null) {
+			return;
+		}
+		File file = getFile(descriptor.getUriString());
+		if (!file.isDirectory()) {
+			throw new IOException("资源并非文件夹!");
+		}
+		FileUtils.deleteDir(file, true);
+	}
 }

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

@@ -12,6 +12,12 @@ public interface ResourceHandler {
 
 	public ResourceDescriptor put(Request request) throws FileNotFoundException, IOException;
 
+	public void delete(ResourceDescriptor descriptor) throws IOException;
+
+	public ResourceDescriptor move(Request request);
+
+	public ResourceDescriptor copy(Request request);
+
 	public Map<String, DataSource> getAttachments(Map<String, String> arguments, ResourceDescriptor descriptor)
 			throws WSException;
 }

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

@@ -26,6 +26,7 @@ public class ResourceHandlerRegistry {
 		typeHandlers.put(ResourceDescriptor.TYPE_XML, FileResourceHandler.class);
 		typeHandlers.put(ResourceDescriptor.TYPE_JAR, FileResourceHandler.class);
 		typeHandlers.put(ResourceDescriptor.TYPE_REFERENCE, FileResourceHandler.class);
+		typeHandlers.put(ResourceDescriptor.TYPE_UNKNOW, FileResourceHandler.class);
 	}
 
 	public void init() throws ClassNotFoundException, InstantiationException, IllegalAccessException {

+ 77 - 2
src/main/java/com/uas/report/axis/repository/RepositoryManagementServiceImpl.java

@@ -348,8 +348,83 @@ public class RepositoryManagementServiceImpl implements RepositoryManagementServ
 
 	@Override
 	public String delete(String requestXmlString) {
-		// TODO Auto-generated method stub
-		return null;
+		OperationResult operationResult = new OperationResult();
+		operationResult.setVersion(VERSION);
+		// operationResult.setReturnCode( OperationResult.SUCCESS );
+		try {
+			// Iterator iter = element.getChildElements();
+			// String requestXmlString = ((OMElement) iter.next()).getText();
+
+			// Unmarshall xmlDescriptor request...
+			StringReader xmlStringReader = new StringReader(requestXmlString);
+			Request request = (Request) Unmarshaller.unmarshal(xmlStringReader);
+			// createAuditEvent(request.getOperationName(),
+			// request.getResourceDescriptor().getWsType(),
+			// request.getResourceDescriptor().getIsNew());
+			setLocale(request.getLocale());
+
+			String reportUnitUrl = getArgumentValue(Argument.MODIFY_REPORTUNIT, request.getArguments());
+
+			if (reportUnitUrl != null && reportUnitUrl.length() > 0) {
+				logger.debug("Delete: resource in reportUnit: " + reportUnitUrl);
+
+				// Report unit modification....
+				// ReportUnit reportUnit = (ReportUnit)
+				// repository.getResource(null, reportUnitUrl);
+				// if (reportUnit == null) {
+				// throw new
+				// WSException(WSException.REFERENCED_RESOURCE_NOT_FOUND,
+				// messageSource.getMessage("webservices.error.reportUnitNotFound",
+				// null, getLocale()));
+				// }
+				//
+				// SubResourceHandler handler = (SubResourceHandler)
+				// getHandlerRegistry().getHandler(reportUnit);
+				// handler.deleteSubResource(reportUnit,
+				// request.getResourceDescriptor(), this);
+				operationResult.setReturnCode(1);
+				operationResult.setMessage("不支持该类型的资源!");
+			} else {
+				// ResourceDescriptor rd =
+				// createResourceDescriptor(request.getResourceDescriptor().getUriString());
+				ResourceDescriptor resourceDescriptor = basicResourceHandler
+						.locateResourceDescriptor(request.getResourceDescriptor().getUriString());
+				if (resourceDescriptor == null) {
+					logger.error("Delete: no resource : " + request.getResourceDescriptor().getUriString());
+					// or.setReturnCode(2);
+					// or.setMessage("Resource not found");
+					operationResult.setReturnCode(2);
+					operationResult.setMessage("Resource not found");
+				} else {
+					String wsType = resourceDescriptor.getWsType();
+					logger.debug("Delete: resource : " + wsType);
+					// ResourceHandler handler =
+					// getHandlerRegistry().getHandler(wsType);
+					BasicResourceHandler handler = resourceHandlerRegistry.getHandler(wsType);
+					// handler.delete(rd, this);
+					handler.delete(resourceDescriptor);
+				}
+			}
+
+			// if (operationResult.getReturnCode() != 0) {
+			// addExceptionToAllAuditEvents(new
+			// Exception(operationResult.getMessage()));
+			// }
+		} catch (WSException e) {
+			operationResult.setReturnCode(e.getErrorCode());
+			operationResult.setMessage(e.getMessage());
+			// addExceptionToAllAuditEvents(e);
+		} catch (Exception e) {
+			e.printStackTrace();
+			logger.error("caught exception: " + e.getMessage(), e);
+
+			operationResult.setReturnCode(1);
+			operationResult.setMessage(e.getMessage());
+			// addExceptionToAllAuditEvents(e);
+		}
+
+		logger.debug("Marshalling response");
+		return marshalResponse(operationResult);
 	}
 
 	@Override

+ 0 - 26
src/main/java/com/uas/report/axis/util/StreamUtil.java

@@ -1,26 +0,0 @@
-package com.uas.report.axis.util;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-public class StreamUtil {
-
-	private static final int READ_STREAM_BUFFER_SIZE = 10000;
-
-	public static byte[] readData(InputStream is) throws IOException {
-		if (is == null) {
-			return null;
-		}
-
-		ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
-		byte[] bytes = new byte[READ_STREAM_BUFFER_SIZE];
-		int ln = 0;
-		while ((ln = is.read(bytes)) > 0) {
-			baos.write(bytes, 0, ln);
-		}
-
-		return baos.toByteArray();
-	}
-}