Java tutorial
/* ========================================================================== * * Copyright (C) 2006, 2007 TAO Consulting Pte <http://www.taoconsulting.sg/> * * ========================================================================== * * * * 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 biz.taoconsulting.dominodav.resource; import java.io.InputStream; import java.io.OutputStream; import java.sql.Blob; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Date; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletContext; import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import biz.taoconsulting.dominodav.exceptions.DAVNotFoundException; import biz.taoconsulting.dominodav.interfaces.IDAVAddressInformation; import biz.taoconsulting.dominodav.interfaces.IDAVRepository; import com.ibm.xsp.webdav.repository.DAVRepositoryMETA; /** * @author Stephan H. Wissel * */ public class DAVResourceJDBC extends DAVAbstractResource { /** * Logger for Errors */ private static final Log LOGGER = LogFactory.getLog(DAVResourceJDBC.class); private String DBFileID; private String DBDocID; private String mimeType; private DAVRepositoryMETA repositoryMeta; /** * @param rep * The containing Repository * @param url * the access to the resource from the browser relative to the * repository * @throws DAVNotFoundException * -- if the repository is not there */ public DAVResourceJDBC(IDAVRepository rep, String url) throws DAVNotFoundException { this.setMember(false); this.setup(rep, url); LOGGER.debug("New DAVResourceJDBC created" + url); } /** * @param rep * The repository * @param url * the access to the resource from the browser relative to the * repository * @param isMember * - for directories: is it listed as part of the parent or by * itself? * @throws DAVNotFoundException * -- resource might not be there */ public DAVResourceJDBC(IDAVRepository rep, String url, boolean isMember) throws DAVNotFoundException { this.setMember(isMember); this.setup(rep, url); } /** * @param rep * the containing repository * @param url * the access to the resource from the browser relative to the * repository * @throws DAVNotFoundException * -- we might ask for an non-existing resource */ private void setup(IDAVRepository rep, String url) throws DAVNotFoundException { this.repositoryMeta = DAVRepositoryMETA.getRepository(null); // Store a link to the repository this.setOwner(rep); // The path can't be null and can't be empty. if it is empty we use the // "/" if (url == null || url.equals("")) { url = new String("/"); } // Memorize the url requested this.setPublicHref(url); // Memorize the full URI; this.setInternalAddress(((IDAVAddressInformation) rep).getPublicHref() + url); this.setDBDocID(url.split("/")[1]); this.getInitDBFileValues(); } /** * /** * * @see biz.taoconsulting.dominodav.resource.DAVAbstractResource#getStream() */ public InputStream getStream() { Connection conn = null; Statement stmt = null; InputStream blobStream = null; try { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) // THe internal address of a JDBC source is the data source envCtx.lookup(this.repositoryMeta.getInternalAddress()); conn = ds.getConnection(); stmt = conn.createStatement(); // XXX: THat is plain wrong -- need to rework the JDBC data source // query ResultSet rs = stmt.executeQuery( "select f.fil_blocksize,f.fil_contents_blob from ibkuis_pp_files f where f.fil_id=" + this.getDBFileID()); if (rs.next()) { Blob blob = rs.getBlob(2); blobStream = blob.getBinaryStream(); } } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { /** Exception handling **/ } } return blobStream; } /** * @see biz.taoconsulting.dominodav.resource.DAVAbstractResource#getOutputStream() */ public OutputStream getOutputStream() { // TODO Implement return null; } /** * Delete a file resource * * @return true/false : did the deletion work? */ public boolean delete() { // TODO Implement return false; } /** * (non-Javadoc) * * @see biz.taoconsulting.dominodav.resource.DAVAbstractResource#getMimeType(javax.servlet.ServletContext) */ public String getMimeType(ServletContext context) { return this.mimeType; } /** * @param mimeType */ public void setMimeType(String mimeType) { this.mimeType = mimeType; } private void getInitDBFileValues() { Statement stmt = null; Statement stmt1 = null; Connection conn = null; try { Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); DataSource ds = (DataSource) envCtx.lookup(this.repositoryMeta.getInternalAddress()); conn = ds.getConnection(); stmt1 = conn.createStatement(); // TODO fix this stmt1.executeQuery("select uis_mid_onetimeinitweb('DATENADMIN','umsys','DE') as a from dual"); stmt = conn.createStatement(); // TODO: Fix that SQL ResultSet rs = stmt.executeQuery( "select t.dtyp_mimetype,d.*," + "f.fil_length,f.fil_id from umsys.ibkuis_co_filetype t," + "uis_pp_documents_v d, ibkuis_pp_files f where d.D_ID =" + this.getDBDocID() + "and f.fil_id = d.D_FIL_ID and t.dtyp_kz = upper(d.D_TYP)"); if (rs.next()) { this.setName(rs.getString("D_FILE")); this.setExtension(rs.getString("D_TYP")); this.setContentLength(rs.getString("FIL_LENGTH")); this.setDBFileID(rs.getString("FIL_ID")); this.setMimeType(rs.getString("dtyp_mimetype")); System.out.println("BREAK"); } } catch (NamingException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { try { if (stmt != null) stmt.close(); if (stmt1 != null) stmt1.close(); if (conn != null) conn.close(); } catch (SQLException e) { /** Exception handling **/ } } } /** * @return fileID */ public String getDBFileID() { return DBFileID; } /** * @param fileID */ public void setDBFileID(String fileID) { DBFileID = fileID; } /** * @return DocID */ public String getDBDocID() { return DBDocID; } /** * @param docID */ public void setDBDocID(String docID) { DBDocID = docID; } public void patchLastModified(Date dt) { } public void patchCreationDate(Date dt) { } }