/* * #! * Ontopia Classify * #- * Copyright (C) 2001 - 2013 The Ontopia Project * #- * Licensed 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 net.ontopia.topicmaps.classify; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import net.ontopia.utils.OntopiaRuntimeException; import net.ontopia.utils.StreamUtils; import net.ontopia.utils.StringUtils; import org.apache.commons.fileupload.DefaultFileItemFactory; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileUpload; /** * INTERNAL: */ public class ClassifyUtils { public static byte[] getContent(String file_or_url) { File file = new File(file_or_url); if (file.exists()) { try { return StreamUtils.readAndClose(new FileInputStream(file)); } catch (IOException e) { // ignore } } // try file_or_url as URL return null; } public static ClassifiableContentIF getClassifiableContent(String file_or_url) { return getClassifiableContent(getContent(file_or_url), file_or_url); } public static ClassifiableContentIF getClassifiableContent(byte[] content) { return getClassifiableContent(content, "content-" + StringUtils.md5_32(new String(content))); } private static ClassifiableContentIF getClassifiableContent(byte[] content, String identifier) { if (content != null) { ClassifiableContent cc = new ClassifiableContent(); cc.setIdentifier(identifier); cc.setContent(content); return cc; } return null; } public static ClassifiableContentIF getFileUploadContent(HttpServletRequest request) { // Handle file upload String contentType = request.getHeader("content-type"); // out.write("CT: " + contentType + " " + tm + " " + id); if (contentType != null && contentType.startsWith("multipart/form-data")) { try { FileUpload upload = new FileUpload(new DefaultFileItemFactory()); for (FileItem item : upload.parseRequest(request)) { if (item.getSize() > 0) { // ISSUE: could make use of content type if known byte[] content = item.get(); ClassifiableContent cc = new ClassifiableContent(); String name = item.getName(); if (name != null) cc.setIdentifier("fileupload:name:" + name); else cc.setIdentifier("fileupload:field:" + item.getFieldName()); cc.setContent(content); return cc; } } } catch (Exception e) { throw new OntopiaRuntimeException(e); } } return null; } }