-/*
- * Copyright (C) 2007-2012 Mathieu Baudier
- *
- * 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 org.argeo.slc.web.ajaxplorer.file;
-
-import java.io.File;
-import java.net.URLEncoder;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.argeo.slc.web.ajaxplorer.AjxpDriverException;
-
-public class AjxpFile {
- private final static Log log = LogFactory.getLog(AjxpFile.class);
-
- // FIXME: more generic modif time format?
- private final static SimpleDateFormat sdf = new SimpleDateFormat(
- "dd/MM/yyyy hh:mm");
-
- private final File file;
- private final String parentPath;
- private final String filePath;
-
- private final String ext;
- private final FileType type;
-
- public AjxpFile(File file, String parentPath) {
- this.file = file;
- this.parentPath = parentPath;
- if (parentPath.equals("/")) {
- this.filePath = "/" + file.getName();
- } else {
- this.filePath = parentPath + "/" + file.getName();
- }
- this.ext = file.isDirectory() ? null : file.getName().substring(
- file.getName().indexOf('.') + 1);
- this.type = FileType.findType(ext);
- }
-
- public String toXml(final LsMode mode, final String encoding) {
- try {
- StringBuffer buf = new StringBuffer();
- buf.append("<tree");
- addAttr("text", file.getName(), buf);
- if (type != FileType.FOLDER) {
- if (mode == LsMode.SEARCH)
- addAttr("is_file", "true", buf);// FIXME: consistent value?
- else if (mode == LsMode.FILE_LIST) {
- addAttr("filename", filePath, buf);
- addAttr("is_file", "1", buf);
- addAttr("icon", type.getIcon(), buf);
-
- addAttr("modiftime", formatModifTime(), buf);
- addAttr("mimestring", type.getMimeString(), buf);
- addAttr("filesize", formatFileSize(), buf);
-
- if (type.isImage()) {
- addAttr("is_image", "1", buf);
- addAttr("image_type", type.getImageType(), buf);
- addAttr("image_width", "100", buf);// FIXME: read image
- addAttr("image_height", "100", buf);// FIXME: read image
-
- } else {
- addAttr("is_image", "0", buf);
- }
- }
-
- } else {// dir
- if (mode == LsMode.NULL || mode == LsMode.FILE_LIST) {
- addAttr("filename", filePath, buf);
- if (mode == LsMode.NULL) {
- addAttr("icon", "client/images/foldericon.png", buf);
- addAttr("openicon", "client/images/openfoldericon.png",
- buf);
- addAttr("parentName", parentPath, buf);
- addAttr("src", "content.php?dir="
- + URLEncoder.encode(filePath, encoding), buf);
- addAttr(
- "action",
- "javascript:ajaxplorer.getFoldersTree().clickNode(CURRENT_ID)",
- buf);
- } else if (mode == LsMode.FILE_LIST) {
- addAttr("icon", type.getIcon(), buf);// FIXME:
- // consistent?
- addAttr("is_file", "0", buf);
- addAttr("is_image", "0", buf);
- addAttr("mimestring", "Directory", buf);
- addAttr("modiftime", formatModifTime(), buf);
- addAttr("filesize", "-", buf);
- }
- }
-
- }
-
- addAdditionalAttrs(buf, mode, encoding);
-
- buf.append("/>");
-
- if (log.isTraceEnabled())
- log.trace(buf.toString());
-
- return buf.toString();
- } catch (Exception e) {
- throw new AjxpDriverException("Could not serialize file " + file, e);
- }
- }
-
- private String formatModifTime() {
- return sdf.format(new Date(file.lastModified()));
- }
-
- private String formatFileSize() {
- return (file.length() / 1024) + " Kb";
- }
-
- protected void addAttr(String attrName, String attrValue, StringBuffer buf) {
- buf.append(" ").append(attrName).append("=\"").append(attrValue)
- .append("\"");
- }
-
- /** To be overridden, do nothing by default. */
- protected void addAdditionalAttrs(final StringBuffer buf,
- final LsMode mode, final String encoding) {
-
- }
-}