Example usage for org.apache.commons.vfs2 FileObject resolveFile

List of usage examples for org.apache.commons.vfs2 FileObject resolveFile

Introduction

In this page you can find the example usage for org.apache.commons.vfs2 FileObject resolveFile.

Prototype

FileObject resolveFile(String path) throws FileSystemException;

Source Link

Document

Finds a file, relative to this file.

Usage

From source file:de.innovationgate.wgpublisher.design.fs.FileSystemDesignManager.java

protected FileObject initialDeployScriptModule(WGCSSJSModule script) throws IOException, InstantiationException,
        IllegalAccessException, WGAPIException, WGDesignSyncException {

    if (script.isMetadataModule()) {
        return null;
    }/*from   w  ww  . ja v a  2s. c  o m*/

    ScriptInformation info = DesignDirectory.getScriptInformation(script.getCodeType());
    if (info == null) {
        _log.warn("Cannot deploy unknown script code type: " + script.getCodeType());
        return null;
    }

    // Get script type folder
    FileObject scriptTypeFolder = getScriptTypeFolder(info.getFolder());

    // Eventually create intermediate directories
    List<String> path = WGUtils.deserializeCollection(script.getName(), ":", true);
    String localName = (String) path.get(path.size() - 1);
    FileObject currentDir = scriptTypeFolder;
    for (int i = 0; i < path.size() - 1; i++) {
        currentDir = currentDir.resolveFile((String) path.get(i));
        if (!currentDir.exists()) {
            _log.info("Creating script category directory" + getRelativePath(currentDir));
            try {
                currentDir.createFolder();
            } catch (FileSystemException e) {
                throw new WGInitialDeployException(
                        "Could not create script category folder '" + getRelativePath(currentDir) + "'", e);
            }
        } else if (!currentDir.getType().equals(FileType.FOLDER)) {
            throw new WGInitialDeployException(
                    "Cannot deploy " + script.getDocumentKey() + " to sync folder because the directory name '"
                            + path.get(i) + "' is already used by another file");
        }
    }

    // Create code file
    FileObject codeFile = currentDir.resolveFile(localName + info.getSuffix());
    _log.info("Creating script module file " + getRelativePath(codeFile));
    try {
        codeFile.createFile();
    } catch (FileSystemException e) {
        throw new WGInitialDeployException(
                "Could not create script code file '" + codeFile.getName().getPathDecoded() + "'");
    }
    Writer writer = createWriter(codeFile);
    writer.write(script.getCode());
    writer.close();

    // Create metadata file
    ScriptMetadata metaData = new ScriptMetadata(script);
    FileObject metadataDir = currentDir.resolveFile(DesignDirectory.NAME_METADATADIR);
    if (!metadataDir.exists()) {
        _log.info("Creating script metadata directory " + getRelativePath(metadataDir));
        try {
            metadataDir.createFolder();
        } catch (FileSystemException e) {
            throw new WGInitialDeployException(
                    "Could not create metadata folder '" + getRelativePath(metadataDir) + "'");
        }
    }
    FileObject metadataFile = metadataDir.resolveFile(localName + DesignDirectory.SUFFIX_METADATA);
    _log.info("Creating script metadata file " + getRelativePath(metadataFile));
    writer = createWriter(metadataFile);
    writer.write(_xstream.toXML(metaData.getInfo()));
    writer.close();

    return codeFile;
}

From source file:de.innovationgate.wgpublisher.services.WGACoreServicesImpl.java

public void initializeOverlay(RemoteSession session, PluginInfo pluginInfo, String designFolder)
        throws WGAServiceException {

    StandardFileSystemManager fsManager = new StandardFileSystemManager();
    try {//from  www. j ava 2  s .c o m
        fsManager.init();
        if (!isAdminServiceEnabled()) {
            throw new WGAServiceException("Administrative services are disabled");
        }

        if (!isAdminSession(session)) {
            throw new WGAServiceException("You need an administrative login to access this service.");
        }

        WGAPlugin basePlugin = _core.getPluginSet().getPluginsByInstallationKey()
                .get(pluginInfo.getInstallationKey());
        if (basePlugin == null) {
            throw new WGAServiceException(
                    "No plugin is installed with installation key " + pluginInfo.getInstallationKey());
        }
        WGDatabase pluginDB = _core.getContentdbs().get(basePlugin.buildDatabaseKey());
        if (pluginDB == null) {
            throw new WGAServiceException(
                    "Plugin database not connected for plugin " + basePlugin.getIdentification());
        }

        FileSystemDesignSource fsDesignSource = (FileSystemDesignSource) _core.getDesignManager()
                .getDesignSources().get(WGAConfiguration.UID_DESIGNSOURCE_FILESYSTEM);
        WGADesign overlayDesign = fsDesignSource.getDesign(designFolder);
        if (overlayDesign == null) {
            throw new WGAServiceException("File Directory Design '" + designFolder + "' does not exist");
        }

        String designFolderLocation = fsDesignSource.getDesignLocation(overlayDesign);

        FileObject designFolderObj = fsManager.resolveFile(designFolderLocation);
        if (!designFolderObj.exists() || !designFolderObj.getType().equals(FileType.FOLDER)) {
            throw new WGAServiceException(
                    "Design folder '" + designFolder + "' cannot be found or is no folder");
        }

        // Determine design encoding of folder to import to
        DesignDefinition designDef = null;
        FileObject designDefFile = designFolderObj.resolveFile("design.xml");
        if (designDefFile.exists()) {
            designDef = DesignDefinition.load(designDefFile);
        }

        CSConfig csConfig = null;
        FileObject csConfigFile = designFolderObj.resolveFile("files/system/csconfig.xml");
        if (csConfigFile.exists()) {
            csConfig = CSConfig.load(csConfigFile);
        }

        String designEncoding = FileSystemDesignManager.determineDesignEncoding(designDef, csConfig);

        // Trigger overlay init/uprade process
        OverlayStatus status = FileSystemDesignProvider.determineOverlayStatus(
                (FileSystemDesignProvider) pluginDB.getDesignProvider(), basePlugin.getPluginID(),
                designFolderObj, designEncoding, _core.getLog(), _core.getDesignFileValidator());
        FileSystemDesignProvider.upgradeOverlay((FileSystemDesignProvider) pluginDB.getDesignProvider(),
                basePlugin.getPluginID(), status, designFolderObj, designEncoding, _core.getLog(),
                _core.getDesignFileValidator());

        // Disconnect consumer apps
        WGADesignManager designManager = _core.getDesignManager();
        for (WGDatabase consumerDb : _core.getContentdbs().values()) {

            WGDesignProvider provider = consumerDb.getDesignProvider();
            if (provider instanceof OverlayDesignProvider) {
                OverlayDesignProvider overlayProvider = (OverlayDesignProvider) provider;
                if (overlayProvider.getOverlay() instanceof FileSystemDesignProvider) {
                    FileSystemDesignProvider fsProvider = (FileSystemDesignProvider) overlayProvider
                            .getOverlay();
                    if (fsProvider.getBaseFolder().equals(designFolderObj)) {
                        _core.removeContentDB(consumerDb.getDbReference());
                    }
                }
            }
        }

        // Run update content dbs to reconnect
        _core.updateContentDBs();

    } catch (Exception e) {
        if (e instanceof WGAServiceException) {
            throw (WGAServiceException) e;
        } else {
            throw new WGAServiceException("Overlay initialisation failed.", e);
        }
    } finally {
        fsManager.close();
    }

}

From source file:de.innovationgate.wgpublisher.design.fs.FileSystemDesignManager.java

private FileObject findMatchingChild(FileObject folder, String baseName, Set<String> suffixes,
        boolean exactMatch) throws FileSystemException {
    FileObject matchingChild = null;

    // First try fast straight fetch using lowercase file
    for (String suffix : suffixes) {
        FileObject straightChild = folder.resolveFile(baseName.toLowerCase() + suffix.toLowerCase());
        if (straightChild.exists()) {
            return straightChild;
        }//from   w w w  .  j  ava 2s  .  c om
    }

    // Secondly we iterate over all children and to a case-insensitive
    // equals
    FileObject[] children = folder.getChildren();

    for (String suffix : suffixes) {
        for (FileObject child : children) {
            if (exactMatch) {
                if (child.getName().getBaseName().equalsIgnoreCase(baseName + suffix)) {
                    matchingChild = child;
                    break;
                }
            } else {
                String fileName = child.getName().getBaseName().toLowerCase();
                String elementName = baseName.toLowerCase() + suffix.toLowerCase();
                if (fileName.startsWith(elementName) && fileName.indexOf(".", elementName.length()) == -1) {
                    matchingChild = child;
                    break;
                }
            }
        }
    }

    return matchingChild;
}

From source file:de.innovationgate.wgpublisher.design.fs.FileSystemDesignManager.java

protected FileObject initialDeployFileContainer(WGFileContainer con) throws IOException, InstantiationException,
        IllegalAccessException, WGAPIException, WGDesignSyncException {

    // Create container folder
    FileObject containerFolder = getFilesFolder().resolveFile(con.getName());
    _log.info("Creating file container folder " + getRelativePath(containerFolder));
    try {/* ww w. j  a  v a 2s .  c  o m*/
        containerFolder.createFolder();
    } catch (FileSystemException e) {
        throw new WGInitialDeployException(
                "Could not create file container folder '" + containerFolder.getName().getPathDecoded() + "'",
                e);
    }

    // Create metadata file
    FCMetadata metaData = new FCMetadata(con);
    FileObject metadataFile = containerFolder
            .resolveFile(AbstractDesignFile.FILECONTAINER_METADATA_FILENAME + DesignDirectory.SUFFIX_METADATA);
    _log.info("Creating file container metadata file " + getRelativePath(metadataFile));
    Writer writer = createWriter(metadataFile);
    writer.write(_xstream.toXML(metaData.getInfo()));
    writer.close();

    // Create contained files
    Iterator fileNames = con.getFileNames().iterator();
    String fileName;
    FileObject file;
    while (fileNames.hasNext()) {
        fileName = (String) fileNames.next();
        InputStream in = con.getFileData(fileName);
        file = containerFolder.resolveFile(fileName);
        _log.info("Creating file container file " + getRelativePath(file));
        try {
            file.createFile();
        } catch (FileSystemException e) {
            throw new WGInitialDeployException(
                    "Could not create container file '" + getRelativePath(file) + "'", e);
        }
        OutputStream out = file.getContent().getOutputStream();
        WGUtils.inToOut(in, out, 2048);
        in.close();
        out.close();
    }

    return containerFolder;

}

From source file:de.innovationgate.utils.WGUtils.java

/**
 * Resolves an eventually present directory link file (variant with Commons VFS file objects). Use this with folders that either may be used themselves or that contain a directory link pointing to the directory to use.
 * @param file The directory that might contain a directory link file.
 * @return Either the path that an available directory link file points to or the given directory itself again.
 *//*from   ww  w  .j a v  a 2 s .  c o m*/
public static FileObject resolveDirLink(FileObject file) throws FileSystemException {

    if (file != null && file.exists()) {
        if (file.getType().equals(FileType.FOLDER)) {
            FileObject link = file.resolveFile(DIRLINK_FILE);
            if (link.exists()) {
                // dir link present resolve

                Document doc;
                try {
                    InputStream fileInputStream = link.getContent().getInputStream();
                    String linkLocation = readDirLinkLocation(fileInputStream);
                    if (linkLocation != null) {
                        if (linkLocation.startsWith("../")) {
                            return file.resolveFile(linkLocation);
                        } else {
                            return file.getFileSystem().resolveFile(linkLocation);
                        }
                    }
                } catch (Exception e) {
                    Logger.getLogger("wga.utils")
                            .error("Unable to resolve dir link. '" + link.getName().getPath() + "'.", e);
                }
            }
        }
    }
    // no dir link or file does not exist - just return
    return file;

}

From source file:de.innovationgate.utils.WGUtils.java

/**
 * Returns a VFS file object for a folder. If the  folder does not exist it is created.
 * @param parent The parent folder of the retrieved folder
 * @param name The name of the folder to retrieve
 * @return The folder//from   w ww.  j  a v a2s.  c  o m
 * @throws IOException
 */
public static FileObject getOrCreateFolder(FileObject parent, String name) throws IOException {
    if (!parent.getType().equals(FileType.FOLDER)) {
        throw new IllegalArgumentException("Parent file is no folder: " + parent.getName().getPathDecoded());
    }

    FileObject folder = parent.resolveFile(name);
    if (!folder.exists()) {
        if (!folder.getFileSystem().hasCapability(Capability.CREATE)) {
            throw new IOException("File system of file " + folder.getURL().toString() + " is read only");
        }
        folder.createFolder();
    }
    if (!folder.getType().equals(FileType.FOLDER)) {
        throw new IllegalArgumentException("There is already a file of this name: " + name);
    }
    return folder;
}

From source file:com.sonicle.webtop.mail.Service.java

public void processRequestCloudFile(HttpServletRequest request, HttpServletResponse response, PrintWriter out) {
    try {//from  w  ww . j  a v a 2s  .  c o  m
        String subject = ServletUtils.getStringParameter(request, "subject", true);
        String path = "/Uploads";
        int sid = vfsmanager.getMyDocumentsStoreId();
        FileObject fo = vfsmanager.getStoreFile(sid, path);
        if (!fo.exists())
            fo.createFolder();

        String dirname = PathUtils
                .sanitizeFolderName(DateTimeUtils.createYmdHmsFormatter(environment.getProfile().getTimeZone())
                        .print(DateTimeUtils.now()) + " - " + subject);

        FileObject dir = fo.resolveFile(dirname);
        if (!dir.exists())
            dir.createFolder();

        JsonResult jsres = new JsonResult();
        jsres.put("storeId", sid);
        jsres.put("filePath", path + "/" + dirname + "/");
        jsres.printTo(out);
    } catch (Exception ex) {
        logger.error("Request cloud file failure", ex);
        new JsonResult(ex).printTo(out);
    }
}

From source file:org.anarres.filechooser.impl.vfs2.VFSJFileChooserTest.java

@Test
public void testFileChooser() throws Exception {
    StandardFileSystemManager manager = new StandardFileSystemManager();
    manager.init();/*w  w  w.  jav a  2  s  .  c o m*/

    final FileObject root = manager.resolveFile("ram:/");
    FileObject foo = root.resolveFile("foo");
    foo.createFolder();
    foo.resolveFile("foo0").createFile();
    foo.resolveFile("foo1").createFile();
    root.resolveFile("bar").createFile();

    EventQueue.invokeLater(new Runnable() {

        @Override
        public void run() {
            try {
                CommonsVfs2JFileChooser chooser = new CommonsVfs2JFileChooser();
                chooser.setMultiSelectionEnabled(true);
                chooser.setCurrentDirectory(root);
                VFSJFileChooser.RETURN_TYPE ret = chooser.showOpenDialog(null);
                LOG.info("RETURN_TYPE = " + ret);
                LOG.info("Selected FO  = " + chooser.getSelectedFile());
                LOG.info("Selected FOs = " + Arrays.toString(chooser.getSelectedFiles()));
                print(chooser.getSelectedFile());
                for (FileObject file : chooser.getSelectedFiles()) {
                    print(file);
                }
            } catch (FileSystemException e) {
                throw new RuntimeException(e);
            }
        }
    });

    Robot robot = BasicRobot.robotWithCurrentAwtHierarchy();
    robot.waitForIdle();

    VFSJFileChooserFixture<FileObject> chooser = VFSJFileChooserFinder.<FileObject>findFileChooser()
            .using(robot);
    // Thread.sleep(2000);
    chooser.setCurrentDirectory(foo);
    // Thread.sleep(2000);
    chooser.approve();
}

From source file:org.apache.commons.vfs2.example.Shell.java

/**
 * Does a 'cp' command./*from w  w  w . j a  v a 2s  . c  om*/
 */
private void cp(final String[] cmd) throws Exception {
    if (cmd.length < 3) {
        throw new Exception("USAGE: cp <src> <dest>");
    }

    final FileObject src = mgr.resolveFile(cwd, cmd[1]);
    FileObject dest = mgr.resolveFile(cwd, cmd[2]);
    if (dest.exists() && dest.getType() == FileType.FOLDER) {
        dest = dest.resolveFile(src.getName().getBaseName());
    }

    dest.copyFrom(src, Selectors.SELECT_ALL);
}

From source file:org.apache.hadoop.gateway.topology.file.FileTopologyProviderTest.java

private FileObject createFile(FileObject parent, String name, String resource, long timestamp)
        throws IOException {
    FileObject file = parent.resolveFile(name);
    if (!file.exists()) {
        file.createFile();/*from ww w . ja  v  a 2  s.c  o  m*/
    }
    InputStream input = ClassLoader.getSystemResourceAsStream(resource);
    OutputStream output = file.getContent().getOutputStream();
    IOUtils.copy(input, output);
    output.flush();
    input.close();
    output.close();
    file.getContent().setLastModifiedTime(timestamp);
    assertTrue("Failed to create test file " + file.getName().getFriendlyURI(), file.exists());
    assertTrue("Failed to populate test file " + file.getName().getFriendlyURI(),
            file.getContent().getSize() > 0);

    //    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
    //    IOUtils.copy( file.getContent().getInputStream(), buffer );
    //    System.out.println( new String( buffer.toString( "UTF-8" ) ) );

    return file;
}