/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ /** * Helper class to hold a Filename or a FileURL * Something like File in Java, * with some more extensions direct to ConvWatch and it's name conventions * * */ package convwatch; import helper.URLHelper; import convwatch.FileHelper; import helper.StringHelper; import util.utils; interface Filenamer { public String getSuffix(); public String getFileURL(); public String getAbsoluteSystemFilename(); public String getFilename(); public String getSystemPath(); } // ----------------------------------------------------------------------------- abstract class FilenameHelper_impl implements Filenamer { String fs; // file separator like '/' String m_sPath; String m_sFilename; String m_sSuffix; int m_nNumber = 0; public String getNumber() { return StringHelper.createValueString(m_nNumber, 4); } public void setNumber(int _n) { m_nNumber = _n; } void initMember() { fs = System.getProperty("file.separator"); } /** * initialise a FilenameHelper_impl with a complete filename. * if the filename starts with 'file:///' it is interpret as a file URL * */ public FilenameHelper_impl() { initMember(); } public void setCompleteFilename(String _sFilename) { if (_sFilename.startsWith("file:///")) { _sFilename = FileHelper.getSystemPathFromFileURL(_sFilename); } _sFilename = utils.replaceAll13(_sFilename, "\\\\", "/"); String sPath = checkPath(FileHelper.getPath(_sFilename)); String sFilenameWithSuffix = checkFilename(FileHelper.getBasename(_sFilename)); String sSuffix = splitSuffix(sFilenameWithSuffix); m_sPath = sPath; m_sFilename = FileHelper.getNameNoSuffix(sFilenameWithSuffix); m_sSuffix = sSuffix; } /** * initialise a FilenameHelper_impl with a path a name and a suffix separately */ public FilenameHelper_impl(String _sPath, String _sName, String _sSuffix) { initMember(); _sPath = utils.replaceAll13(_sPath, "\\\\", "/"); String sPath = checkPath(_sPath); String sFilename = checkFilename(_sName); String sSuffix = checkSuffix(_sSuffix); m_sPath = sPath; m_sFilename = sFilename; m_sSuffix = sSuffix; } /** * @return the current path as a OOo path URL */ public String getFileURL() { String sSystemPath = createAbsoluteFilename(); String sFileURL = URLHelper.getFileURLFromSystemPath(sSystemPath); return sFileURL; } /** * @return the current path as a system path */ public String getAbsoluteSystemFilename() { String sSystemFilename = createAbsoluteFilename(); sSystemFilename = utils.replaceAll13(sSystemFilename, "/", fs); return sSystemFilename; } /** * @return the filename without it's suffix */ public String getName() { return m_sFilename; } /** * set only the filename, maybe it's is only a directory. */ public void setName(String _sName) { m_sFilename = _sName; } public void setPath(String _sName) { m_sPath = _sName; } /** * @return a created name */ abstract public String buildName(); // { // return getName(); // } /** * @return the complete filename with it's suffix */ public String getFilename() { return buildName() + "." + getSuffix(); } /** * @return the path as system path */ public String getSystemPath() { String sSystemPath = m_sPath; sSystemPath = utils.replaceAll13(sSystemPath, "/", fs); return sSystemPath; } /** * @return true, if current SystemPath is a directory */ public boolean isDirectory() { return FileHelper.isDir(getSystemPath()); } /** * @return true, if the file really exist. */ public boolean exists() { return FileHelper.exists(createAbsoluteFilename()); } /** * @return the current suffix */ public String getSuffix() { return m_sSuffix; } /** * @return the complete name. Without convert the path separator! */ String createAbsoluteFilename() { return m_sPath + fs + getFilename(); } /* * remove follows 'file separators' */ String checkPath(String _sPath) { String sPath; if (_sPath.endsWith("/") || _sPath.endsWith("\\")) { sPath = _sPath.substring(0, _sPath.length() - 1); } else { sPath = _sPath; } return sPath; } String checkFilename(String _sFilename) { String sFilename; if (_sFilename.startsWith("/") || _sFilename.startsWith("\\")) { sFilename = _sFilename.substring(1); } else { sFilename = _sFilename; } return sFilename; } String checkSuffix(String _sSuffix) { String sSuffix; if (_sSuffix.startsWith(".")) { sSuffix = _sSuffix.substring(1); } else { sSuffix = _sSuffix; } return sSuffix; } String splitSuffix(String _sName) { String sSuffix = FileHelper.getSuffix(_sName); return checkSuffix(sSuffix); } public boolean equals(FilenameHelper_impl _aOtherFN) { String sPath = createAbsoluteFilename(); String sPathOther = _aOtherFN.createAbsoluteFilename(); if (sPath.equals(sPathOther)) { return true; } return false; } } /** * Original filename */ class OriginalFilename extends FilenameHelper_impl { public String buildName() { return getName(); } public OriginalFilename(){} public OriginalFilename(String _path, String _filename, String _ext) { super(_path, _filename, _ext);} } /** * Reference from original */ class OriginalReferenceFilename extends FilenameHelper_impl { public String getSuffix() { return "prn"; } public String buildName() { return getName(); } public OriginalReferenceFilename(){} public OriginalReferenceFilename(String _path, String _filename, String _ext) { super(_path, _filename, _ext);} } /** * picture from reference from original */ class OriginalReferencePictureFilename extends FilenameHelper_impl { public String getSuffix() { return "jpg"; } public String buildName() { return getName() + "-" + getNumber() + "-ref"; } public String getBuildString() { return getName() + "-" + "%04d" + "-ref"; } public OriginalReferencePictureFilename(){} public OriginalReferencePictureFilename(String _path, String _filename, String _ext) { super(_path, _filename, _ext);} } /** * Reference from OpenOffice.org */ class CurrentReferenceFilename extends FilenameHelper_impl { public String getSuffix() { return "ps"; } public String buildName() { return getName(); } public CurrentReferenceFilename(){} public CurrentReferenceFilename(String _path, String _filename, String _ext) { super(_path, _filename, _ext);} } /** * picture from reference from OpenOffice.org */ class CurrentReferencePictureFilename extends FilenameHelper_impl { public String getSuffix() { return "jpg"; } public String buildName() { return getName() + "-" + getNumber() + "-new-ref"; } public String getBuildString() { return getName() + "-" + "%04d" + "-new-ref"; } public CurrentReferencePictureFilename(){} public CurrentReferencePictureFilename(String _path, String _filename, String _ext) { super(_path, _filename, _ext);} } public class FilenameHelper { public static void main(String[] args) { OriginalReferenceFilename d = new OriginalReferenceFilename(); d.setCompleteFilename("c:\\dir1\\dir2\\name.ext"); System.out.println("Suffix: " + d.getSuffix()); System.out.println("Path: " + d.getSystemPath()); System.out.println("Absolute system path filename: " + d.getAbsoluteSystemFilename()); System.out.println("URL: " + d.getFileURL()); System.out.println("Filename: " + d.getFilename()); OriginalReferenceFilename a = new OriginalReferenceFilename("/dir1/dir2/", "name",".ext"); OriginalReferenceFilename a1 = new OriginalReferenceFilename("/dir1/dir2","name.ext",""); OriginalReferenceFilename a2 = new OriginalReferenceFilename("/dir1/dir2","/name.ext",""); OriginalReferenceFilename a3 = new OriginalReferenceFilename("/dir1/dir2","/name",".ext"); OriginalReferenceFilename a4 = new OriginalReferenceFilename("/dir1/dir2","name","ext"); // OriginalReferenceFilename b = new OriginalReferenceFilename("c:/dir1/dir2/name.ext"); // OriginalReferenceFilename c = new OriginalReferenceFilename("file:///dir1/dir2/name.ext"); // OriginalReferenceFilename e = new OriginalReferenceFilename("c:\\dir1\\dir2\\name"); // OriginalReferenceFilename f = new OriginalReferenceFilename("c:\\dir1\\dir2"); // OriginalReferenceFilename g = new OriginalReferenceFilename("c:\\dir1\\dir2\\"); } }