package org.smartly.commons.io.repository.deploy; import org.smartly.commons.logging.Level; import org.smartly.commons.logging.Logger; import org.smartly.commons.logging.util.LoggingUtils; import org.smartly.commons.util.PathUtils; import org.smartly.commons.util.StringUtils; /** * @author angelo.geminiani */ public class FileItem { private String _fileName; private final String _absolutePath; private String _relativePath; private final String _root; private final String _folder; public FileItem(final Object deployer, final String root, final String absolutePath) { _absolutePath = PathUtils.validateFolderSeparator(absolutePath); _root = this.toExternalForm(root, absolutePath); _folder = this.lookupFolder(_root, _absolutePath); try { if (!this.isJar(_absolutePath)) { _fileName = PathUtils.subtract(_root, _absolutePath); _relativePath = PathUtils.merge( PathUtils.getPackagePath(deployer.getClass()), _fileName); } else { // root: file:/C:/lib/BEEingX.jar!/org/sf/quickpin/htdocs/ // absolute path: jar:file:/C:/lib/BEEingX.jar!/org/sf/bee/app/server/web/htdocs/vtlinfo.vhtml _fileName = PathUtils.subtract(_root, _absolutePath); _relativePath = _absolutePath.substring(_absolutePath.indexOf(".jar!") + 6); } } catch (Throwable t) { this.getLogger().log(Level.SEVERE, null, t); } } @Override public String toString() { final StringBuilder result = new StringBuilder(); result.append(this.getClass().getName()).append("{"); result.append("fileName: ").append(_fileName); result.append(", "); result.append("folder: ").append(_folder); result.append(", "); result.append("root: ").append(_root); result.append("}"); return result.toString(); } public String getFileName() { return _fileName; } public String getRoot() { return _root; } public String getFolder() { return _folder; } public String getAbsolutePath() { return _absolutePath; } public boolean isJar() { return this.isJar(_absolutePath); } public String getPackageName() { if (this.isJar()) { return _relativePath; } else { return _relativePath; } } public boolean isDirectory() { return !StringUtils.hasText(PathUtils.getFilenameExtension(_fileName)); } // ------------------------------------------------------------------------ // p r i v a t e // ------------------------------------------------------------------------ private Logger getLogger() { return LoggingUtils.getLogger(this); } private boolean isJar(final String path) { return PathUtils.isJar(path); } private String toExternalForm(final String root, final String absolutePath) { if (this.isJar(absolutePath)) { if (!root.startsWith("jar:")) { return "jar:".concat(root); } } return root; } private String lookupFolder(final String root, final String path) { return PathUtils.getParent(PathUtils.subtract(root, path)); } }