Explorar el Código

[jasperserver axis] 实现下载接口

sunyj hace 8 años
padre
commit
e7a5942832

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

@@ -55,6 +55,9 @@ public class Argument {
 	 */
 	public static final String START_FROM_DIRECTORY = "START_FROM_DIRECTORY";
 
+	// marks to skip uploading blob from DB
+	public static final String NO_RESOURCE_DATA_ATTACHMENT = "NO_ATTACHMENT";
+
 	private String name;
 	private String value;
 

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

@@ -8,6 +8,9 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+
+import javax.activation.DataSource;
 
 import com.uas.report.SpecialProperties;
 import com.uas.report.util.CollectionUtils;
@@ -95,7 +98,7 @@ public class BasicResourceHandler implements ResourceHandler {
 				.matches("^(gif|jpg|jpeg|png|bmp|tiff|pcx|tga|exif|fpx|svg|psd|cdr|pcd|dxf|ufo|eps|ai|raw)$");
 	}
 
-	private File getFile(String resourceURI) {
+	protected File getFile(String resourceURI) {
 		return new File(specialProperties.getLocalBaseDir() + "/" + resourceURI);
 	}
 
@@ -257,5 +260,13 @@ public class BasicResourceHandler implements ResourceHandler {
 		resource = locateResource(file);
 		resourceDescriptor = toResourceDescriptor(resource);
 		return resourceDescriptor;
-	};
+	}
+
+	@Override
+	public Map<String, DataSource> getAttachments(Map<String, String> arguments, ResourceDescriptor descriptor)
+			throws WSException {
+		// default implementation does nothing
+		return null;
+	}
+
 }

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

@@ -1,5 +1,11 @@
 package com.uas.report.axis;
 
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import javax.activation.DataSource;
+import javax.activation.FileDataSource;
+
 public class FileResourceHandler extends BasicResourceHandler {
 
 	@Override
@@ -7,4 +13,23 @@ public class FileResourceHandler extends BasicResourceHandler {
 		return FileResource.class;
 	}
 
+	@Override
+	public Map<String, DataSource> getAttachments(Map<String, String> arguments, ResourceDescriptor descriptor)
+			throws WSException {
+		Map<String, DataSource> attachments = new LinkedHashMap<>();
+		if (arguments.containsKey(Argument.NO_RESOURCE_DATA_ATTACHMENT)) {
+			descriptor.setHasData(false);
+		} else {
+			// Retrieve resource data...
+			descriptor.setHasData(true);
+			// FileResourceData fileData =
+			// repositoryManagementService.getRepository().getResourceData(null,descriptor.getUriString());
+			// ResourceDataSource attachmentSource = new ResourceDataSource("",
+			// fileData);
+			// attachments.addAttachment("attachment", attachmentSource);
+			FileDataSource dataSource = new FileDataSource(getFile(descriptor.getUriString()));
+			attachments.put("attachment", dataSource);
+		}
+		return attachments;
+	}
 }

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

@@ -2,10 +2,16 @@ package com.uas.report.axis;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.util.Map;
+
+import javax.activation.DataSource;
 
 public interface ResourceHandler {
 
 	public Class<?> getResourceType();
 
 	public ResourceDescriptor put(Request request) throws FileNotFoundException, IOException;
+
+	public Map<String, DataSource> getAttachments(Map<String, String> arguments, ResourceDescriptor descriptor)
+			throws WSException;
 }

+ 0 - 20
src/main/java/com/uas/report/axis/ResultAttachments.java

@@ -1,20 +0,0 @@
-package com.uas.report.axis;
-
-public class ResultAttachments {
-
-	private boolean encapsulationDime;
-
-	public boolean isEncapsulationDime() {
-		return encapsulationDime;
-	}
-
-	public void setEncapsulationDime(boolean encapsulationDime) {
-		this.encapsulationDime = encapsulationDime;
-	}
-
-	@Override
-	public String toString() {
-		return "ResultAttachments [encapsulationDime=" + encapsulationDime + "]";
-	}
-
-}

+ 12 - 17
src/main/java/com/uas/report/axis/repository/RepositoryManagementServiceImpl.java

@@ -1,8 +1,5 @@
 package com.uas.report.axis.repository;
 
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringReader;
 import java.io.StringWriter;
@@ -26,7 +23,6 @@ import org.apache.axis.attachments.Attachments;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.MessageSourceResolvable;
 import org.springframework.context.NoSuchMessageException;
 import org.springframework.context.support.DefaultMessageSourceResolvable;
@@ -35,7 +31,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.DefaultMessageCodesResolver;
 import org.springframework.validation.MessageCodesResolver;
 
-import com.uas.report.SpecialProperties;
 import com.uas.report.axis.Argument;
 import com.uas.report.axis.ListItem;
 import com.uas.report.axis.OperationResult;
@@ -44,15 +39,12 @@ import com.uas.report.axis.Resource;
 import com.uas.report.axis.ResourceDescriptor;
 import com.uas.report.axis.BasicResourceHandler;
 import com.uas.report.axis.ResourceHandlerRegistry;
-import com.uas.report.axis.ResourceProperty;
-import com.uas.report.axis.ResultAttachments;
 import com.uas.report.axis.ValidationError;
 import com.uas.report.axis.ValidationErrors;
 import com.uas.report.axis.WSException;
 import com.uas.report.axis.WSValidationException;
 import com.uas.report.axis.util.Marshaller;
 import com.uas.report.axis.util.Unmarshaller;
-import com.uas.report.util.ContextUtils;
 import com.uas.report.util.FileUtils;
 
 @Service
@@ -225,10 +217,11 @@ public class RepositoryManagementServiceImpl implements RepositoryManagementServ
 
 			List<Argument> args = request.getArguments();
 
-			List<ListItem> params = Collections.emptyList();
-			if (request.getResourceDescriptor() != null && request.getResourceDescriptor().getParameters() != null) {
-				params = request.getResourceDescriptor().getParameters();
-			}
+			// List<ListItem> params = Collections.emptyList();
+			// if (request.getResourceDescriptor() != null &&
+			// request.getResourceDescriptor().getParameters() != null) {
+			// params = request.getResourceDescriptor().getParameters();
+			// }
 
 			HashMap<String, String> specialOptions = new HashMap<>();
 			if (args != null) {
@@ -264,9 +257,9 @@ public class RepositoryManagementServiceImpl implements RepositoryManagementServ
 						+ rd.getResourceType());
 				operationResult.getResourceDescriptors().add(rd);
 
-				ResultAttachments attachments = new ResultAttachments();
-				attachments
-						.setEncapsulationDime(getArgumentValue("USE_DIME_ATTACHMENTS", request.getArguments()) != null);
+				// ResultAttachments attachments = new ResultAttachments();
+				// attachments.setEncapsulationDime(getArgumentValue("USE_DIME_ATTACHMENTS",
+				// request.getArguments()) != null);
 				// ResourceHandler handler =
 				// getHandlerRegistry().getHandler(rd.getWsType());
 				// handler.getAttachments(resource, specialOptions, rd,
@@ -275,9 +268,11 @@ public class RepositoryManagementServiceImpl implements RepositoryManagementServ
 				// addExceptionToAllAuditEvents(new
 				// Exception(operationResult.getMessage()));
 				// }
-				//
 				// return marshalResponse(operationResult, attachments);
-				return marshalResponse(operationResult);
+				BasicResourceHandler handler = resourceHandlerRegistry.getHandler(rd.getWsType());
+				Map<String, DataSource> attachments = handler.getAttachments(specialOptions, rd);
+				boolean isEncapsulationDime = getArgumentValue("USE_DIME_ATTACHMENTS", request.getArguments()) != null;
+				return marshalResponse(operationResult, attachments, isEncapsulationDime);
 			}
 		} catch (Exception e) {