| /******************************************************************************* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| *******************************************************************************/ |
| package org.apache.ofbiz.content.data; |
| |
| import java.io.File; |
| import java.io.FileNotFoundException; |
| import java.io.FileOutputStream; |
| import java.io.FileWriter; |
| import java.io.IOException; |
| import java.io.RandomAccessFile; |
| import java.io.StringWriter; |
| import java.io.Writer; |
| import java.nio.ByteBuffer; |
| import java.sql.Timestamp; |
| import java.util.HashMap; |
| import java.util.Locale; |
| import java.util.Map; |
| |
| import org.apache.ofbiz.base.util.Debug; |
| import org.apache.ofbiz.base.util.GeneralException; |
| import org.apache.ofbiz.base.util.UtilDateTime; |
| import org.apache.ofbiz.base.util.UtilGenerics; |
| import org.apache.ofbiz.base.util.UtilMisc; |
| import org.apache.ofbiz.base.util.UtilProperties; |
| import org.apache.ofbiz.base.util.UtilValidate; |
| import org.apache.ofbiz.entity.Delegator; |
| import org.apache.ofbiz.entity.GenericEntityException; |
| import org.apache.ofbiz.entity.GenericValue; |
| import org.apache.ofbiz.entity.util.EntityQuery; |
| import org.apache.ofbiz.service.DispatchContext; |
| import org.apache.ofbiz.service.GenericServiceException; |
| import org.apache.ofbiz.service.ModelService; |
| import org.apache.ofbiz.service.ServiceUtil; |
| |
| /** |
| * DataServices Class |
| */ |
| public class DataServices { |
| |
| public static final String module = DataServices.class.getName(); |
| public static final String resource = "ContentUiLabels"; |
| |
| public static Map<String, Object> clearAssociatedRenderCache(DispatchContext dctx, Map<String, Object> context) { |
| Delegator delegator = dctx.getDelegator(); |
| String dataResourceId = (String) context.get("dataResourceId"); |
| Locale locale = (Locale) context.get("locale"); |
| try { |
| DataResourceWorker.clearAssociatedRenderCache(delegator, dataResourceId); |
| } catch (GeneralException e) { |
| Debug.logError(e, "Unable to clear associated render cache with dataResourceId=" + dataResourceId, module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentClearAssociatedRenderCacheError", UtilMisc.toMap("dataResourceId", dataResourceId), locale)); |
| } |
| return ServiceUtil.returnSuccess(); |
| } |
| |
| /** |
| * A top-level service for creating a DataResource and ElectronicText together. |
| */ |
| public static Map<String, Object> createDataResourceAndText(DispatchContext dctx, Map<String, ? extends Object> rcontext) { |
| Map<String, Object> context = UtilMisc.makeMapWritable(rcontext); |
| Map<String, Object> result = new HashMap<String, Object>(); |
| |
| Map<String, Object> thisResult = createDataResourceMethod(dctx, context); |
| if (thisResult.get(ModelService.RESPONSE_MESSAGE) != null) { |
| return ServiceUtil.returnError((String) thisResult.get(ModelService.ERROR_MESSAGE)); |
| } |
| |
| result.put("dataResourceId", thisResult.get("dataResourceId")); |
| context.put("dataResourceId", thisResult.get("dataResourceId")); |
| |
| String dataResourceTypeId = (String) context.get("dataResourceTypeId"); |
| if (dataResourceTypeId != null && dataResourceTypeId.equals("ELECTRONIC_TEXT")) { |
| thisResult = createElectronicText(dctx, context); |
| if (thisResult.get(ModelService.RESPONSE_MESSAGE) != null) { |
| return ServiceUtil.returnError((String) thisResult.get(ModelService.ERROR_MESSAGE)); |
| } |
| } |
| |
| return result; |
| } |
| |
| /** |
| * A service wrapper for the createDataResourceMethod method. Forces permissions to be checked. |
| */ |
| public static Map<String, Object> createDataResource(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = createDataResourceMethod(dctx, context); |
| return result; |
| } |
| |
| public static Map<String, Object> createDataResourceMethod(DispatchContext dctx, Map<String, ? extends Object> rcontext) { |
| Map<String, Object> context = UtilMisc.makeMapWritable(rcontext); |
| Map<String, Object> result = new HashMap<String, Object>(); |
| Delegator delegator = dctx.getDelegator(); |
| GenericValue userLogin = (GenericValue) context.get("userLogin"); |
| String userLoginId = (String) userLogin.get("userLoginId"); |
| String createdByUserLogin = userLoginId; |
| String lastModifiedByUserLogin = userLoginId; |
| Timestamp createdDate = UtilDateTime.nowTimestamp(); |
| Timestamp lastModifiedDate = UtilDateTime.nowTimestamp(); |
| String dataTemplateTypeId = (String) context.get("dataTemplateTypeId"); |
| if (UtilValidate.isEmpty(dataTemplateTypeId)) { |
| dataTemplateTypeId = "NONE"; |
| context.put("dataTemplateTypeId", dataTemplateTypeId); |
| } |
| |
| // If textData exists, then create DataResource and return dataResourceId |
| String dataResourceId = (String) context.get("dataResourceId"); |
| if (UtilValidate.isEmpty(dataResourceId)) { |
| dataResourceId = delegator.getNextSeqId("DataResource"); |
| } |
| if (Debug.infoOn()) { |
| Debug.logInfo("in createDataResourceMethod, dataResourceId:" + dataResourceId, module); |
| } |
| GenericValue dataResource = delegator.makeValue("DataResource", UtilMisc.toMap("dataResourceId", dataResourceId)); |
| dataResource.setNonPKFields(context); |
| dataResource.put("createdByUserLogin", createdByUserLogin); |
| dataResource.put("lastModifiedByUserLogin", lastModifiedByUserLogin); |
| dataResource.put("createdDate", createdDate); |
| dataResource.put("lastModifiedDate", lastModifiedDate); |
| // get first statusId for content out of the statusItem table if not provided |
| if (UtilValidate.isEmpty(dataResource.get("statusId"))) { |
| try { |
| GenericValue statusItem = EntityQuery.use(delegator).from("StatusItem").where("statusTypeId", "CONTENT_STATUS").orderBy("sequenceId").queryFirst(); |
| if (statusItem != null) { |
| dataResource.put("statusId", statusItem.get("statusId")); |
| } |
| } catch (GenericEntityException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| } |
| |
| try { |
| dataResource.create(); |
| } catch (GenericEntityException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } catch (Exception e2) { |
| return ServiceUtil.returnError(e2.getMessage()); |
| } |
| result.put("dataResourceId", dataResourceId); |
| result.put("dataResource", dataResource); |
| return result; |
| } |
| |
| /** |
| * A service wrapper for the createElectronicTextMethod method. Forces permissions to be checked. |
| */ |
| public static Map<String, Object> createElectronicText(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = createElectronicTextMethod(dctx, context); |
| return result; |
| } |
| |
| public static Map<String, Object> createElectronicTextMethod(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = new HashMap<String, Object>(); |
| Delegator delegator = dctx.getDelegator(); |
| String dataResourceId = (String) context.get("dataResourceId"); |
| String textData = (String) context.get("textData"); |
| if (UtilValidate.isNotEmpty(textData)) { |
| GenericValue electronicText = delegator.makeValue("ElectronicText", UtilMisc.toMap("dataResourceId", dataResourceId, "textData", textData)); |
| try { |
| electronicText.create(); |
| } catch (GenericEntityException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| } |
| return result; |
| } |
| |
| /** |
| * A service wrapper for the createFileMethod method. Forces permissions to be checked. |
| */ |
| public static Map<String, Object> createFile(DispatchContext dctx, Map<String, ? extends Object> context) { |
| return createFileMethod(dctx, context); |
| } |
| |
| public static Map<String, Object> createFileNoPerm(DispatchContext dctx, Map<String, ? extends Object> rcontext) { |
| Map<String, Object> context = UtilMisc.makeMapWritable(rcontext); |
| context.put("skipPermissionCheck", "true"); |
| return createFileMethod(dctx, context); |
| } |
| |
| public static Map<String, Object> createFileMethod(DispatchContext dctx, Map<String, ? extends Object> context) { |
| //GenericValue dataResource = (GenericValue) context.get("dataResource"); |
| String dataResourceTypeId = (String) context.get("dataResourceTypeId"); |
| String objectInfo = (String) context.get("objectInfo"); |
| ByteBuffer binData = (ByteBuffer) context.get("binData"); |
| String textData = (String) context.get("textData"); |
| Locale locale = (Locale) context.get("locale"); |
| |
| // a few place holders |
| String prefix = ""; |
| String sep = ""; |
| |
| // extended validation for binary/character data |
| if (UtilValidate.isNotEmpty(textData) && binData != null) { |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentCannotProcessBothCharacterAndBinaryFile", locale)); |
| } |
| |
| // obtain a reference to the file |
| File file = null; |
| if (UtilValidate.isEmpty(objectInfo)) { |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentUnableObtainReferenceToFile", UtilMisc.toMap("objectInfo", ""), locale)); |
| } |
| if (UtilValidate.isEmpty(dataResourceTypeId) || dataResourceTypeId.equals("LOCAL_FILE") || dataResourceTypeId.equals("LOCAL_FILE_BIN")) { |
| file = new File(objectInfo); |
| if (!file.isAbsolute()) { |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentLocalFileDoesNotPointToAbsoluteLocation", locale)); |
| } |
| } else if (dataResourceTypeId.equals("OFBIZ_FILE") || dataResourceTypeId.equals("OFBIZ_FILE_BIN")) { |
| prefix = System.getProperty("ofbiz.home"); |
| if (objectInfo.indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) { |
| sep = "/"; |
| } |
| file = new File(prefix + sep + objectInfo); |
| } else if (dataResourceTypeId.equals("CONTEXT_FILE") || dataResourceTypeId.equals("CONTEXT_FILE_BIN")) { |
| prefix = (String) context.get("rootDir"); |
| if (UtilValidate.isEmpty(prefix)) { |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentCannotFindContextFileWithEmptyContextRoot", locale)); |
| } |
| if (objectInfo.indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) { |
| sep = "/"; |
| } |
| file = new File(prefix + sep + objectInfo); |
| } |
| if (file == null) { |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentUnableObtainReferenceToFile", UtilMisc.toMap("objectInfo", objectInfo), locale)); |
| } |
| |
| // write the data to the file |
| if (UtilValidate.isNotEmpty(textData)) { |
| try { |
| FileWriter out = new FileWriter(file); |
| out.write(textData); |
| out.close(); |
| } catch (IOException e) { |
| Debug.logWarning(e, module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentUnableWriteCharacterDataToFile", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); |
| } |
| } else if (binData != null) { |
| try { |
| RandomAccessFile out = new RandomAccessFile(file, "rw"); |
| out.write(binData.array()); |
| out.close(); |
| } catch (FileNotFoundException e) { |
| Debug.logError(e, module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentUnableToOpenFileForWriting", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); |
| } catch (IOException e) { |
| Debug.logError(e, module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentUnableWriteBinaryDataToFile", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); |
| } |
| } else { |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentNoContentFilePassed", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); |
| } |
| |
| Map<String, Object> result = ServiceUtil.returnSuccess(); |
| return result; |
| } |
| |
| /** |
| * A top-level service for updating a DataResource and ElectronicText together. |
| */ |
| public static Map<String, Object> updateDataResourceAndText(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> thisResult = updateDataResourceMethod(dctx, context); |
| if (thisResult.get(ModelService.RESPONSE_MESSAGE) != null) { |
| return ServiceUtil.returnError((String) thisResult.get(ModelService.ERROR_MESSAGE)); |
| } |
| String dataResourceTypeId = (String) context.get("dataResourceTypeId"); |
| if (dataResourceTypeId != null && dataResourceTypeId.equals("ELECTRONIC_TEXT")) { |
| thisResult = updateElectronicText(dctx, context); |
| if (thisResult.get(ModelService.RESPONSE_MESSAGE) != null) { |
| return ServiceUtil.returnError((String) thisResult.get(ModelService.ERROR_MESSAGE)); |
| } |
| } |
| return ServiceUtil.returnSuccess(); |
| } |
| |
| /** |
| * A service wrapper for the updateDataResourceMethod method. Forces permissions to be checked. |
| */ |
| public static Map<String, Object> updateDataResource(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = updateDataResourceMethod(dctx, context); |
| return result; |
| } |
| |
| public static Map<String, Object> updateDataResourceMethod(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = new HashMap<String, Object>(); |
| Delegator delegator = dctx.getDelegator(); |
| GenericValue dataResource = null; |
| Locale locale = (Locale) context.get("locale"); |
| GenericValue userLogin = (GenericValue) context.get("userLogin"); |
| String userLoginId = (String) userLogin.get("userLoginId"); |
| String lastModifiedByUserLogin = userLoginId; |
| Timestamp lastModifiedDate = UtilDateTime.nowTimestamp(); |
| |
| // If textData exists, then create DataResource and return dataResourceId |
| String dataResourceId = (String) context.get("dataResourceId"); |
| try { |
| dataResource = EntityQuery.use(delegator).from("DataResource").where("dataResourceId", dataResourceId).queryOne(); |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentDataResourceNotFound", UtilMisc.toMap("parameters.dataResourceId", dataResourceId), locale)); |
| } |
| |
| dataResource.setNonPKFields(context); |
| dataResource.put("lastModifiedByUserLogin", lastModifiedByUserLogin); |
| dataResource.put("lastModifiedDate", lastModifiedDate); |
| |
| try { |
| dataResource.store(); |
| } catch (GenericEntityException e) { |
| Debug.logError(e, module); |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| |
| result.put("dataResource", dataResource); |
| return result; |
| } |
| |
| /** |
| * A service wrapper for the updateElectronicTextMethod method. Forces permissions to be checked. |
| */ |
| public static Map<String, Object> updateElectronicText(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = updateElectronicTextMethod(dctx, context); |
| return result; |
| } |
| |
| /** |
| * Because sometimes a DataResource will exist, but no ElectronicText has been created, |
| * this method will create an ElectronicText if it does not exist. |
| * @param dctx the dispatch context |
| * @param context the context |
| * @return update the ElectronicText |
| */ |
| public static Map<String, Object> updateElectronicTextMethod(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = new HashMap<String, Object>(); |
| Delegator delegator = dctx.getDelegator(); |
| GenericValue electronicText = null; |
| Locale locale = (Locale) context.get("locale"); |
| String dataResourceId = (String) context.get("dataResourceId"); |
| result.put("dataResourceId", dataResourceId); |
| String contentId = (String) context.get("contentId"); |
| result.put("contentId", contentId); |
| if (UtilValidate.isEmpty(dataResourceId)) { |
| Debug.logError("dataResourceId is null.", module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentDataResourceIsNull", locale)); |
| } |
| String textData = (String) context.get("textData"); |
| if (Debug.verboseOn()) { |
| Debug.logVerbose("in updateElectronicText, textData:" + textData, module); |
| } |
| try { |
| electronicText = EntityQuery.use(delegator).from("ElectronicText").where("dataResourceId", dataResourceId).queryOne(); |
| if (electronicText != null) { |
| electronicText.put("textData", textData); |
| electronicText.store(); |
| } else { |
| electronicText = delegator.makeValue("ElectronicText"); |
| electronicText.put("dataResourceId", dataResourceId); |
| electronicText.put("textData", textData); |
| electronicText.create(); |
| } |
| } catch (GenericEntityException e) { |
| Debug.logWarning(e, module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentElectronicTextNotFound", locale) + " " + e.getMessage()); |
| } |
| |
| return result; |
| } |
| |
| /** |
| * A service wrapper for the updateFileMethod method. Forces permissions to be checked. |
| */ |
| public static Map<String, Object> updateFile(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = null; |
| try { |
| result = updateFileMethod(dctx, context); |
| } catch (GenericServiceException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| return result; |
| } |
| |
| public static Map<String, Object> updateFileMethod(DispatchContext dctx, Map<String, ? extends Object> context) throws GenericServiceException { |
| Map<String, Object> result = new HashMap<String, Object>(); |
| Locale locale = (Locale) context.get("locale"); |
| String dataResourceTypeId = (String) context.get("dataResourceTypeId"); |
| String objectInfo = (String) context.get("objectInfo"); |
| String textData = (String) context.get("textData"); |
| ByteBuffer binData = (ByteBuffer) context.get("binData"); |
| String prefix = ""; |
| File file = null; |
| String fileName = ""; |
| String sep = ""; |
| try { |
| if (UtilValidate.isEmpty(dataResourceTypeId) || dataResourceTypeId.startsWith("LOCAL_FILE")) { |
| fileName = prefix + sep + objectInfo; |
| file = new File(fileName); |
| if (!file.isAbsolute()) { |
| throw new GenericServiceException("File: " + fileName + " is not absolute."); |
| } |
| } else if (dataResourceTypeId.startsWith("OFBIZ_FILE")) { |
| prefix = System.getProperty("ofbiz.home"); |
| if (objectInfo.indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) { |
| sep = "/"; |
| } |
| file = new File(prefix + sep + objectInfo); |
| } else if (dataResourceTypeId.startsWith("CONTEXT_FILE")) { |
| prefix = (String) context.get("rootDir"); |
| if (objectInfo.indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) { |
| sep = "/"; |
| } |
| file = new File(prefix + sep + objectInfo); |
| } |
| if (file == null) { |
| throw new IOException("File: " + file + " is null"); |
| } |
| |
| // write the data to the file |
| if (UtilValidate.isNotEmpty(textData)) { |
| try { |
| FileWriter out = new FileWriter(file); |
| out.write(textData); |
| out.close(); |
| } catch (IOException e) { |
| Debug.logWarning(e, module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentUnableWriteCharacterDataToFile", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); |
| } |
| } else if (binData != null) { |
| try { |
| RandomAccessFile out = new RandomAccessFile(file, "rw"); |
| out.setLength(binData.array().length); |
| out.write(binData.array()); |
| out.close(); |
| } catch (FileNotFoundException e) { |
| Debug.logError(e, module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentUnableToOpenFileForWriting", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); |
| } catch (IOException e) { |
| Debug.logError(e, module); |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentUnableWriteBinaryDataToFile", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); |
| } |
| } else { |
| return ServiceUtil.returnError(UtilProperties.getMessage(resource, "ContentNoContentFilePassed", UtilMisc.toMap("fileName", file.getAbsolutePath()), locale)); |
| } |
| |
| } catch (IOException e) { |
| Debug.logWarning(e, module); |
| throw new GenericServiceException(e.getMessage()); |
| } |
| |
| return result; |
| } |
| |
| public static Map<String, Object> renderDataResourceAsText(DispatchContext dctx, Map<String, ? extends Object> context) throws GeneralException, IOException { |
| Map<String, Object> results = new HashMap<String, Object>(); |
| Delegator delegator = dctx.getDelegator(); |
| //LocalDispatcher dispatcher = dctx.getDispatcher(); |
| Writer out = (Writer) context.get("outWriter"); |
| Map<String, Object> templateContext = UtilGenerics.checkMap(context.get("templateContext")); |
| //GenericValue userLogin = (GenericValue) context.get("userLogin"); |
| String dataResourceId = (String) context.get("dataResourceId"); |
| if (templateContext != null && UtilValidate.isEmpty(dataResourceId)) { |
| dataResourceId = (String) templateContext.get("dataResourceId"); |
| } |
| String mimeTypeId = (String) context.get("mimeTypeId"); |
| if (templateContext != null && UtilValidate.isEmpty(mimeTypeId)) { |
| mimeTypeId = (String) templateContext.get("mimeTypeId"); |
| } |
| |
| Locale locale = (Locale) context.get("locale"); |
| |
| if (templateContext == null) { |
| templateContext = new HashMap<String, Object>(); |
| } |
| |
| Writer outWriter = new StringWriter(); |
| DataResourceWorker.renderDataResourceAsText(dctx.getDispatcher(), dataResourceId, outWriter, templateContext, locale, mimeTypeId, true); |
| try { |
| out.write(outWriter.toString()); |
| results.put("textData", outWriter.toString()); |
| } catch (IOException e) { |
| Debug.logError(e, "Error rendering sub-content text", module); |
| return ServiceUtil.returnError(e.toString()); |
| } |
| return results; |
| } |
| |
| /** |
| * A service wrapper for the updateImageMethod method. Forces permissions to be checked. |
| */ |
| public static Map<String, Object> updateImage(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = updateImageMethod(dctx, context); |
| return result; |
| } |
| |
| public static Map<String, Object> updateImageMethod(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = new HashMap<String, Object>(); |
| Delegator delegator = dctx.getDelegator(); |
| //Locale locale = (Locale) context.get("locale"); |
| String dataResourceId = (String) context.get("dataResourceId"); |
| ByteBuffer byteBuffer = (ByteBuffer)context.get("imageData"); |
| if (byteBuffer != null) { |
| byte[] imageBytes = byteBuffer.array(); |
| try { |
| GenericValue imageDataResource = EntityQuery.use(delegator).from("ImageDataResource").where("dataResourceId", dataResourceId).queryOne(); |
| if (Debug.infoOn()) { |
| Debug.logInfo("imageDataResource(U):" + imageDataResource, module); |
| Debug.logInfo("imageBytes(U):" + imageBytes, module); |
| } |
| if (imageDataResource == null) { |
| return createImageMethod(dctx, context); |
| } else { |
| imageDataResource.setBytes("imageData", imageBytes); |
| imageDataResource.store(); |
| } |
| } catch (GenericEntityException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| } |
| return result; |
| } |
| |
| /** |
| * A service wrapper for the createImageMethod method. Forces permissions to be checked. |
| */ |
| public static Map<String, Object> createImage(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = createImageMethod(dctx, context); |
| return result; |
| } |
| |
| public static Map<String, Object> createImageMethod(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = new HashMap<String, Object>(); |
| Delegator delegator = dctx.getDelegator(); |
| String dataResourceId = (String) context.get("dataResourceId"); |
| ByteBuffer byteBuffer = (ByteBuffer)context.get("imageData"); |
| if (byteBuffer != null) { |
| byte[] imageBytes = byteBuffer.array(); |
| try { |
| GenericValue imageDataResource = delegator.makeValue("ImageDataResource", UtilMisc.toMap("dataResourceId", dataResourceId)); |
| imageDataResource.setBytes("imageData", imageBytes); |
| if (Debug.infoOn()) { |
| Debug.logInfo("imageDataResource(C):" + imageDataResource, module); |
| } |
| imageDataResource.create(); |
| } catch (GenericEntityException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| } |
| |
| return result; |
| } |
| |
| /** |
| * A service wrapper for the createBinaryFileMethod method. Forces permissions to be checked. |
| */ |
| public static Map<String, Object> createBinaryFile(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = null; |
| try { |
| result = createBinaryFileMethod(dctx, context); |
| } catch (GenericServiceException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| return result; |
| } |
| |
| public static Map<String, Object> createBinaryFileMethod(DispatchContext dctx, Map<String, ? extends Object> context) throws GenericServiceException { |
| Map<String, Object> result = new HashMap<String, Object>(); |
| GenericValue dataResource = (GenericValue) context.get("dataResource"); |
| String dataResourceTypeId = (String) dataResource.get("dataResourceTypeId"); |
| String objectInfo = (String) dataResource.get("objectInfo"); |
| byte [] imageData = (byte []) context.get("imageData"); |
| String rootDir = (String)context.get("rootDir"); |
| File file = null; |
| if (Debug.infoOn()) { |
| Debug.logInfo("in createBinaryFileMethod, dataResourceTypeId:" + dataResourceTypeId, module); |
| Debug.logInfo("in createBinaryFileMethod, objectInfo:" + objectInfo, module); |
| Debug.logInfo("in createBinaryFileMethod, rootDir:" + rootDir, module); |
| } |
| try { |
| file = DataResourceWorker.getContentFile(dataResourceTypeId, objectInfo, rootDir); |
| } catch (FileNotFoundException e) { |
| Debug.logWarning(e, module); |
| throw new GenericServiceException(e.getMessage()); |
| } catch (GeneralException e2) { |
| Debug.logWarning(e2, module); |
| throw new GenericServiceException(e2.getMessage()); |
| } |
| if (Debug.infoOn()) { |
| Debug.logInfo("in createBinaryFileMethod, file:" + file, module); |
| Debug.logInfo("in createBinaryFileMethod, imageData:" + imageData.length, module); |
| } |
| if (imageData != null && imageData.length > 0) { |
| try { |
| FileOutputStream out = new FileOutputStream(file); |
| out.write(imageData); |
| if (Debug.infoOn()) { |
| Debug.logInfo("in createBinaryFileMethod, length:" + file.length(), module); |
| } |
| out.close(); |
| } catch (IOException e) { |
| Debug.logWarning(e, module); |
| throw new GenericServiceException(e.getMessage()); |
| } |
| } |
| return result; |
| } |
| |
| |
| /** |
| * A service wrapper for the createBinaryFileMethod method. Forces permissions to be checked. |
| */ |
| public static Map<String, Object> updateBinaryFile(DispatchContext dctx, Map<String, ? extends Object> context) { |
| Map<String, Object> result = null; |
| try { |
| result = updateBinaryFileMethod(dctx, context); |
| } catch (GenericServiceException e) { |
| return ServiceUtil.returnError(e.getMessage()); |
| } |
| return result; |
| } |
| |
| public static Map<String, Object> updateBinaryFileMethod(DispatchContext dctx, Map<String, ? extends Object> context) throws GenericServiceException { |
| Map<String, Object> result = new HashMap<String, Object>(); |
| GenericValue dataResource = (GenericValue) context.get("dataResource"); |
| String dataResourceTypeId = (String) dataResource.get("dataResourceTypeId"); |
| String objectInfo = (String) dataResource.get("objectInfo"); |
| byte [] imageData = (byte []) context.get("imageData"); |
| String rootDir = (String)context.get("rootDir"); |
| File file = null; |
| if (Debug.infoOn()) { |
| Debug.logInfo("in updateBinaryFileMethod, dataResourceTypeId:" + dataResourceTypeId, module); |
| Debug.logInfo("in updateBinaryFileMethod, objectInfo:" + objectInfo, module); |
| Debug.logInfo("in updateBinaryFileMethod, rootDir:" + rootDir, module); |
| } |
| try { |
| file = DataResourceWorker.getContentFile(dataResourceTypeId, objectInfo, rootDir); |
| } catch (FileNotFoundException e) { |
| Debug.logWarning(e, module); |
| throw new GenericServiceException(e.getMessage()); |
| } catch (GeneralException e2) { |
| Debug.logWarning(e2, module); |
| throw new GenericServiceException(e2.getMessage()); |
| } |
| if (Debug.infoOn()) { |
| Debug.logInfo("in updateBinaryFileMethod, file:" + file, module); |
| Debug.logInfo("in updateBinaryFileMethod, imageData:" + imageData, module); |
| } |
| if (imageData != null && imageData.length > 0) { |
| try { |
| FileOutputStream out = new FileOutputStream(file); |
| out.write(imageData); |
| if (Debug.infoOn()) { |
| Debug.logInfo("in updateBinaryFileMethod, length:" + file.length(), module); |
| } |
| out.close(); |
| } catch (IOException e) { |
| Debug.logWarning(e, module); |
| throw new GenericServiceException(e.getMessage()); |
| } |
| } |
| return result; |
| } |
| } |