📄 dataresourceworker.java
字号:
try {
FreeMarkerWorker.renderTemplate("DataResource:" + dataResourceId, templateText, templateContext, out);
} catch (TemplateException e) {
throw new GeneralException("Error rendering FTL template", e);
}
} else {
throw new GeneralException("The dataTemplateTypeId [" + dataTemplateTypeId + "] is not yet supported");
}
}
}
public static String getDataResourceText(GenericValue dataResource, String mimeTypeId, Locale locale, Map context, GenericDelegator delegator) throws IOException, GeneralException {
Writer outWriter = new StringWriter();
writeDataResourceText(dataResource, mimeTypeId, locale, context, delegator, outWriter);
return outWriter.toString();
}
public static void writeDataResourceText(GenericValue dataResource, String mimeTypeId, Locale locale, Map context, GenericDelegator delegator, Writer outWriter) throws IOException, GeneralException {
String webSiteId = (String) context.get("webSiteId");
String https = (String) context.get("https");
String dataResourceId = dataResource.getString("dataResourceId");
String dataResourceTypeId = dataResource.getString("dataResourceTypeId");
if (UtilValidate.isEmpty(dataResourceTypeId)) {
dataResourceTypeId = "SHORT_TEXT";
}
if (Debug.verboseOn()) Debug.logVerbose(" in writeDataResourceAsHtml, dataResourceId:" + dataResourceId, module);
if (Debug.verboseOn()) Debug.logVerbose(" in writeDataResourceAsHtml, dataResourceTypeId:" + dataResourceTypeId, module);
if (dataResourceTypeId.equals("SHORT_TEXT")) {
String text = dataResource.getString("objectInfo");
outWriter.write(text);
} else if (dataResourceTypeId.equals("ELECTRONIC_TEXT")) {
GenericValue electronicText = delegator.findByPrimaryKey("ElectronicText", UtilMisc.toMap("dataResourceId", dataResourceId));
String text = electronicText.getString("textData");
if (Debug.verboseOn()) Debug.logVerbose(" in writeDataResourceAsHtml, text:" + text, module);
outWriter.write(text);
} else if (dataResourceTypeId.equals("IMAGE_OBJECT")) {
// TODO: Is this where the image (or any binary) object URL is created? looks like it is just returning
//the ID, maybe is okay, but maybe should create the whole image tag so that text and images can be
//interchanged without changing the wrapping template, and so the wrapping template doesn't have to know what the root is, etc
/*
// decide how to render based on the mime-types
// TODO: put this in a separate method to be re-used for file objects as well...
if ("text/html".equals(mimeTypeId)) {
} else if ("text/plain".equals(mimeTypeId)) {
} else {
throw new GeneralException("The renderDataResourceAsText operation does not yet support the desired mime-type: " + mimeTypeId);
}
*/
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(IMAGE), mimeTypeId:" + mimeTypeId, module);
String text = (String) dataResource.get("dataResourceId");
outWriter.write(text);
} else if (dataResourceTypeId.equals("LINK")) {
String text = dataResource.getString("objectInfo");
outWriter.write(text);
} else if (dataResourceTypeId.equals("URL_RESOURCE")) {
String text = null;
URL url = new URL(dataResource.getString("objectInfo"));
if (url.getHost() != null) { // is absolute
InputStream in = url.openStream();
int c;
StringWriter sw = new StringWriter();
while ((c = in.read()) != -1) {
sw.write(c);
}
sw.close();
text = sw.toString();
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(URL-ABS), text:" + text, module);
} else {
String prefix = buildRequestPrefix(delegator, locale, webSiteId, https);
String sep = "";
//String s = "";
if (url.toString().indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) {
sep = "/";
}
String s2 = prefix + sep + url.toString();
URL url2 = new URL(s2);
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(URL-REL), s2:" + s2, module);
text = (String) url2.getContent();
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(URL-REL), text:" + text, module);
}
outWriter.write(text);
} else if (dataResourceTypeId.indexOf("_FILE") >= 0) {
String rootDir = (String) context.get("rootDir");
renderFile(dataResourceTypeId, dataResource.getString("objectInfo"), rootDir, outWriter);
} else {
throw new GeneralException("The dataResourceTypeId [" + dataResourceTypeId + "] is not supported in renderDataResourceAsText");
}
}
public static String getDataResourceTextCache(GenericValue dataResource, String mimeTypeId, Locale locale, Map context, GenericDelegator delegator) throws IOException, GeneralException {
Writer outWriter = new StringWriter();
writeDataResourceText(dataResource, mimeTypeId, locale, context, delegator, outWriter);
return outWriter.toString();
}
public static void writeDataResourceTextCache(GenericValue dataResource, String mimeTypeId, Locale locale, Map context, GenericDelegator delegator, Writer outWriter) throws IOException, GeneralException {
String webSiteId = (String) context.get("webSiteId");
String https = (String) context.get("https");
String dataResourceId = dataResource.getString("dataResourceId");
String dataResourceTypeId = dataResource.getString("dataResourceTypeId");
if (UtilValidate.isEmpty(dataResourceTypeId)) {
dataResourceTypeId = "SHORT_TEXT";
}
if (Debug.verboseOn()) Debug.logVerbose(" in writeDataResourceAsHtml, dataResourceId:" + dataResourceId, module);
if (Debug.verboseOn()) Debug.logVerbose(" in writeDataResourceAsHtml, dataResourceTypeId:" + dataResourceTypeId, module);
if (dataResourceTypeId.equals("SHORT_TEXT")) {
String text = dataResource.getString("objectInfo");
outWriter.write(text);
} else if (dataResourceTypeId.equals("ELECTRONIC_TEXT")) {
GenericValue electronicText = delegator.findByPrimaryKeyCache("ElectronicText", UtilMisc.toMap("dataResourceId", dataResourceId));
String text = electronicText.getString("textData");
if (Debug.verboseOn()) Debug.logVerbose(" in writeDataResourceAsHtml, text:" + text, module);
outWriter.write(text);
} else if (dataResourceTypeId.equals("IMAGE_OBJECT")) {
// TODO: Is this where the image (or any binary) object URL is created? looks like it is just returning
//the ID, maybe is okay, but maybe should create the whole image tag so that text and images can be
//interchanged without changing the wrapping template, and so the wrapping template doesn't have to know what the root is, etc
/*
// decide how to render based on the mime-types
// TODO: put this in a separate method to be re-used for file objects as well...
if ("text/html".equals(mimeTypeId)) {
} else if ("text/plain".equals(mimeTypeId)) {
} else {
throw new GeneralException("The renderDataResourceAsText operation does not yet support the desired mime-type: " + mimeTypeId);
}
*/
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(IMAGE), mimeTypeId:" + mimeTypeId, module);
String text = (String) dataResource.get("dataResourceId");
outWriter.write(text);
} else if (dataResourceTypeId.equals("LINK")) {
String text = dataResource.getString("objectInfo");
outWriter.write(text);
} else if (dataResourceTypeId.equals("URL_RESOURCE")) {
String text = null;
URL url = new URL(dataResource.getString("objectInfo"));
if (url.getHost() != null) { // is absolute
InputStream in = url.openStream();
int c;
StringWriter sw = new StringWriter();
while ((c = in.read()) != -1) {
sw.write(c);
}
sw.close();
text = sw.toString();
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(URL-ABS), text:" + text, module);
} else {
String prefix = buildRequestPrefix(delegator, locale, webSiteId, https);
String sep = "";
//String s = "";
if (url.toString().indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) {
sep = "/";
}
String s2 = prefix + sep + url.toString();
URL url2 = new URL(s2);
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(URL-REL), s2:" + s2, module);
text = (String) url2.getContent();
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(URL-REL), text:" + text, module);
}
outWriter.write(text);
} else if (dataResourceTypeId.indexOf("_FILE") >= 0) {
String rootDir = (String) context.get("rootDir");
renderFile(dataResourceTypeId, dataResource.getString("objectInfo"), rootDir, outWriter);
} else {
throw new GeneralException("The dataResourceTypeId [" + dataResourceTypeId + "] is not supported in renderDataResourceAsText");
}
}
public static void renderFile(String dataResourceTypeId, String objectInfo, String rootDir, Writer out) throws GeneralException, IOException {
// TODO: this method assumes the file is a text file, if it is an image we should respond differently, see the comment above for IMAGE_OBJECT type data resource
if (dataResourceTypeId.equals("LOCAL_FILE")) {
File file = new File(objectInfo);
if (!file.isAbsolute()) {
throw new GeneralException("File (" + objectInfo + ") is not absolute");
}
int c;
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(LOCAL), file:" + file, module);
FileReader in = new FileReader(file);
while ((c = in.read()) != -1) {
out.write(c);
}
} else if (dataResourceTypeId.equals("OFBIZ_FILE")) {
String prefix = System.getProperty("ofbiz.home");
String sep = "";
if (objectInfo.indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) {
sep = "/";
}
File file = new File(prefix + sep + objectInfo);
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(OFBIZ_FILE), file:" + file, module);
int c;
FileReader in = new FileReader(file);
while ((c = in.read()) != -1)
out.write(c);
} else if (dataResourceTypeId.equals("CONTEXT_FILE")) {
String prefix = rootDir;
String sep = "";
if (objectInfo.indexOf("/") != 0 && prefix.lastIndexOf("/") != (prefix.length() - 1)) {
sep = "/";
}
File file = new File(prefix + sep + objectInfo);
int c;
FileReader in = null;
try {
in = new FileReader(file);
} catch (FileNotFoundException e) {
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(CONTEXT_FILE), in FNFexception:" + e.getMessage(), module);
throw new GeneralException("Could not find context file to render", e);
} catch (Exception e) {
Debug.logError(" in renderDataResourceAsHtml(CONTEXT_FILE), got exception:" + e.getMessage(), module);
}
if (Debug.verboseOn()) Debug.logVerbose(" in renderDataResourceAsHtml(CONTEXT_FILE), after FileReader:", module);
while ((c = in.read()) != -1) {
out.write(c);
}
}
return;
}
public static String buildRequestPrefix(GenericDelegator delegator, Locale locale, String webSiteId, String https) {
String prefix = null;
Map prefixValues = new HashMap();
NotificationServices.setBaseUrl(delegator, webSiteId, prefixValues);
if (https != null && https.equalsIgnoreCase("true")) {
prefix = (String) prefixValues.get("baseSecureUrl");
} else {
prefix = (String) prefixValues.get("baseUrl");
}
if (UtilValidate.isEmpty(prefix)) {
if (https != null && https.equalsIgnoreCase("true")) {
prefix = UtilProperties.getMessage("content", "baseSecureUrl", locale);
} else {
prefix = UtilProperties.getMessage("content", "baseUrl", locale);
}
}
if (Debug.verboseOn()) Debug.logVerbose("in buildRequestPrefix, prefix:" + prefix, "");
return prefix;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -