⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmscontentstore.java

📁 jetspeed源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    
    /**
     * Retrive revision content.
     *
     * @param uri Uri
     * @param revisionNumber Node revision number
     */
    public NodeRevisionContent retrieveRevisionContent
        (Uri uri, NodeRevisionDescriptor revisionDescriptor)
        throws ServiceAccessException, RevisionNotFoundException {
        NodeRevisionContent result = null;
        String revisionUri = null;
        if (version)
            revisionUri = uri.toString() + "_"
                + revisionDescriptor.getRevisionNumber();
        else
            revisionUri = uri.toString();
        try {
            File file = new File(rootpath + revisionUri);
            FileInputStream is = new FileInputStream(file);
            InputStreamReader reader = new InputStreamReader
                (is, CHARACTER_ENCODING);
            result = new NodeRevisionContent();
            result.setContent(reader);
            result.setContent(is);
        } catch (FileNotFoundException e) {
            throw new RevisionNotFoundException
                (uri.toString(),
                 revisionDescriptor.getRevisionNumber());
        } catch (IOException e) {
            e.printStackTrace();
            throw new ServiceAccessException(this, e.getMessage());
        }
        return result;

    }
    
    
    /**
     * Create a new revision
     *
     * @param uri Uri
     * @param revisionDescriptor Node revision descriptor
     * @param revisionContent Node revision content
     */
    public void createRevisionContent
        (Uri uri, NodeRevisionDescriptor revisionDescriptor,
         NodeRevisionContent revisionContent)
        throws ServiceAccessException, RevisionAlreadyExistException {
        String revisionUri = null;
        if (version)
            revisionUri = uri.toString() + "_"
                + revisionDescriptor.getRevisionNumber();
        else
            revisionUri = uri.toString();
        
        try {
            File file = new File(rootpath + revisionUri);
            File parentFile = new File(file.getParent());
            if ((parentFile != null) && (!parentFile.exists())) {
                parentFile.mkdirs();
            }
            
            boolean created = !file.exists();
            if (!created) {
                throw new RevisionAlreadyExistException
                    (uri.toString(), revisionDescriptor.getRevisionNumber());
            }
            
            InputStream is = revisionContent.streamContent();
            
            if (is != null) {
                OutputStream os = new FileOutputStream(file);
                // We copy 8 ko with each read
                byte[] buffer = new byte[BUFFER_SIZE];
                long position = 0;
                long contentLength = revisionDescriptor.getContentLength();
                
                while (true) {
                    int nChar = is.read(buffer);
                    if (nChar == -1) {
                        break;
                    }
                    os.write(buffer, 0, nChar);
                    position = position + nChar;
                }
                os.close();
                is.close();
                
                if (contentLength != -1) {
                    if (position != contentLength) {
			// set content length so that repository is consistent
			revisionDescriptor.setContentLength(position);
                        if (position < contentLength) {
                            // Not enough bytes read !!!
                            throw new IOException("Not enough bytes read");
                        }
                        if (position > contentLength) {
                            // Not enough bytes read !!!
                            throw new IOException("Too many bytes read");
                        }
                        // FIXME : Delete the file
                    }
                } else {
                    revisionDescriptor.setContentLength(position);
                }
                
            } else {
            }
            
        } catch (IOException e) {
            throw new ServiceAccessException(this, e.getMessage());
        } catch(RevisionAlreadyExistException e) {
            throw e; // we do NOT want this caught by next clause.
        } catch (Exception e) {
            e.printStackTrace();
            throw new ServiceAccessException(this, e.getMessage());
        }
    }
    
    
    /**
     * Modify the latest revision of an object.
     *
     * @param uri Uri
     * @param revisionDescriptor Node revision descriptor
     * @param revisionContent Node revision content
     */
    public void storeRevisionContent
        (Uri uri, NodeRevisionDescriptor revisionDescriptor,
         NodeRevisionContent revisionContent)
        throws ServiceAccessException, RevisionNotFoundException {
        String revisionUri = null;
        if (version)
            revisionUri = uri.toString() + "_"
                + revisionDescriptor.getRevisionNumber();
        else
            revisionUri = uri.toString();
        try {
            File file = new File(rootpath + revisionUri);
            
            InputStream is = revisionContent.streamContent();
            
            if (is != null) {
                OutputStream os = null;
                try {
                    os = new FileOutputStream(file);
                } catch (FileNotFoundException ex) {
                    // Try to create the parent directory and try again
                    File parentFile = new File(file.getParent());
                    if ((parentFile != null) && (!parentFile.exists())) {
                        parentFile.mkdirs();
                    }
                    os = new FileOutputStream(file);
                }
                // We copy 8 ko with each read
                byte[] buffer = new byte[BUFFER_SIZE];
                long position = 0;
                long contentLength = revisionDescriptor.getContentLength();
                
                while (true) {
                    int nChar = is.read(buffer);
                    if (nChar == -1) {
                        break;
                    }
                    os.write(buffer, 0, nChar);
                    position = position + nChar;
                }
                os.close();
                is.close();
                
                if (contentLength != -1) {
                    if (position != contentLength) {
                        if (position < contentLength) {
                            // Not enough bytes read !!!
                            throw new IOException("Not enough bytes read");
                        }
                        if (position > contentLength) {
                            // Not enough bytes read !!!
                            throw new IOException("Too many bytes read");
                        }
                        // FIXME : Delete the file
                    }
                } else {
                    revisionDescriptor.setContentLength(position);
                }
                
            } else {
            }
            
        } catch (FileNotFoundException e) {
            throw new RevisionNotFoundException
                (uri.toString(), revisionDescriptor.getRevisionNumber());
        } catch (IOException e) {
            e.printStackTrace();
            throw new ServiceAccessException(this, e.getMessage());
        }
    }
    
    
    /**
     * Remove revision.
     *
     * @param uri Uri
     * @param revisionNumber Node revision number
     */
    public void removeRevisionContent(Uri uri,
                                      NodeRevisionDescriptor revisionDescriptor)
        throws ServiceAccessException {
        String revisionUri = null;
        if (version)
            revisionUri = uri.toString() + "_" + revisionDescriptor.getRevisionNumber();
        else
            revisionUri = uri.toString();
        
        try {
            File file = new File(rootpath + revisionUri);
            boolean deleted = file.delete();
            File parentFile = new File(file.getParent());
            if (parentFile != null) {
                parentFile.delete();
            }
        } catch (Exception e) {
            e.printStackTrace();
            throw new ServiceAccessException(this, e.getMessage());
        }
    }
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -