alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*
 *                 Sun Public License Notice
 * 
 * The contents of this file are subject to the Sun Public License
 * Version 1.0 (the "License"). You may not use this file except in
 * compliance with the License. A copy of the License is available at
 * http://www.sun.com/
 * 
 * The Original Code is NetBeans. The Initial Developer of the Original
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun
 * Microsystems, Inc. All Rights Reserved.
 */

package org.netbeans.core.windows.persistence.convert;

import org.netbeans.core.windows.Debug;
import org.netbeans.core.windows.persistence.PersistenceManager;
import org.openide.ErrorManager;
import org.openide.filesystems.*;

/**
 * Handler of changes in old module folder. Changes can be for example
 * generated by enabling/disabling module which defines some winsys
 * element(s).
 * 
 * @author Marek Slama
 */
class ModuleChangeHandlerOld implements FileChangeListener {
    
    private boolean started = false;
    
    private FileSystem fs = null;
    
    private FileObject wmFolder;
    
    private FileObject rootFolder;
    
    private FileObject compsFolder;
    
    /** Creates a new instance of ModuleChangeHandler */
    public ModuleChangeHandlerOld () {
    }
    
    void startHandling () {
        if (started) {
            return;
        }
        ImportManager im = ImportManager.getDefault();
        
        wmFolder = im.getWindowManagerFolder();
        log("startHandling wmFolder:" + wmFolder);
        
        rootFolder = im.getRootFolder();
        log("startHandling rootFolder:" + rootFolder);
        
        compsFolder = im.getComponentsFolder();
        log("startHandling rootFolder:" + compsFolder);
        
        try {
            fs = wmFolder.getFileSystem();
        } catch (FileStateInvalidException exc) {
            ErrorManager em = ErrorManager.getDefault();
            em.log(ErrorManager.WARNING,
            "[WinSys.ModuleChangeHandlerOld.startHandling]" // NOI18N
            + " Cannot get filesystem."); // NOI18N
            em.notify(ErrorManager.INFORMATIONAL,exc);
            return;
        }
        fs.addFileChangeListener(this);
        started = true;
    }
    
    void stopHandling () {
        if (!started) {
            return;
        }
        fs.removeFileChangeListener(this);
        fs = null;
        started = false;
    }

    /** Used to detect if FileEvent event is interesting for us.
     * @return true if event should be accepted
     */
    private boolean acceptEvent (FileObject fo) {
        /*log("acceptEvent ENTER"
        + " fo: " + fo
        + " path: " + fo.getPath()
        + " [" + Integer.toHexString(System.identityHashCode(fo)) + "]"
        + " rootFolder:" + rootFolder
        + " path:" + rootFolder.getPath()
        + " [" + Integer.toHexString(System.identityHashCode(rootFolder)) + "]");*/
        //Root folder
        if (fo.getPath().equals(rootFolder.getPath())) {
            log("acceptEvent ROOT");
            return true;
        }
        //Window manager folder
        if (fo.getPath().equals(wmFolder.getPath())) {
            log("acceptEvent WINDOW MANAGER");
            return true;
        }
        FileObject parent = fo.getParent();
        if (parent == null) {
            return false;
        }
        //Change of workspace config file or workspace folder
        if (parent.getPath().equals(wmFolder.getPath())) {
            log("acceptEvent ++ WORKSPACE ++");
            return true;
        }
        //Change in components folder
        if (parent.getPath().equals(compsFolder.getPath())) {
            log("acceptEvent ++ COMPONENT ++");
            return true;
        }
        parent = parent.getParent();
        if (parent == null) {
            return false;
        }
        //Change of mode config file or mode folder
        if (parent.getPath().equals(wmFolder.getPath())) {
            log("acceptEvent ++ MODE ++");
            return true;
        }
        parent = parent.getParent();
        if (parent == null) {
            return false;
        }
        //Change of tcRef config file
        if (parent.getPath().equals(wmFolder.getPath())) {
            log("acceptEvent ++ TCREF ++");
            return true;
        }
        return false;
    }
    
    public void fileAttributeChanged (FileAttributeEvent fe) {
    }
    
    public void fileChanged (FileEvent fe) {
    }
    
    public void fileDataCreated (FileEvent fe) {
        FileObject fo = fe.getFile();
        //log("fileDataCreated ENTER fo: " + fo
        //+ " isFolder:" + fo.isFolder());
        boolean accepted = acceptEvent(fo);
        if (!accepted) {
            return;
        }
        log("fileDataCreated fo: " + fo
        + " isFolder:" + fo.isFolder()
        + " ACCEPTED");
        //+ " th:" + Thread.currentThread().getName());
        if (accepted && fo.isFolder()) {
            FileObject [] files = fo.getChildren();
            for (int i = 0; i < files.length; i++) {
                System.out.println("fo[" + i + "]: " + files[i]
                + " [" + Integer.toHexString(System.identityHashCode(files[i])) + "]");
            }
        }
        processDataOrFolderCreated(fo);
    }
    
    public void fileFolderCreated (FileEvent fe) {
        FileObject fo = fe.getFile();
        //log("fileFolderCreated ENTER fo: " + fo
        //+ " isFolder:" + fo.isFolder());
        boolean accepted = acceptEvent(fo);
        if (!accepted) {
            return;
        }
        log("fileFolderCreated fo: " + fo
        + " isFolder:" + fo.isFolder()
        + " ACCEPTED");
        //+ " th:" + Thread.currentThread().getName());
        if (accepted && fo.isFolder()) {
            FileObject [] files = fo.getChildren();
            for (int i = 0; i < files.length; i++) {
                log("fo[" + i + "]: " + files[i]
                + " [" + Integer.toHexString(System.identityHashCode(files[i])) + "]");
            }
        }
        processDataOrFolderCreated(fo);
    }
    
    private void processDataOrFolderCreated (FileObject fo) {
        if (fo.getPath().equals(rootFolder.getPath()) || fo.getPath().equals(wmFolder.getPath())) {
            log("processDataOrFolderCreated ADD ALL");
            addAllWorkspaces();
            return;
        }
        FileObject parent1 = fo.getParent();
        if (parent1.getPath().equals(wmFolder.getPath())) {
            /*if (!fo.isFolder() && ImportManager.WORKSPACE_EXT.equals(fo.getExt())) {
                log("processDataOrFolderCreated WORKSPACE ADD");
                addWorkspace(fo.getName());
                return;
            } else*/
            if (fo.isFolder()) {
                log("processDataOrFolderCreated WORKSPACE ADD");
                addWorkspace(fo.getName());
                return;
            }
        }
        FileObject parent2 = parent1.getParent();
        if (parent2.getPath().equals(wmFolder.getPath())) {
            /*if (!fo.isFolder() && PersistenceManager.MODE_EXT.equals(fo.getExt())) {
                log("processDataOrFolderCreated MODE ADD");
                addMode(parent1.getName(), fo.getName());
                return;
            } else*/
            if (fo.isFolder()) {
                log("processDataOrFolderCreated MODE ADD");
                addMode(parent1.getName(), fo.getName());
                return;
            }
        }
        FileObject parent3 = parent2.getParent();
        if (parent3.getPath().equals(wmFolder.getPath())) {
            if (!fo.isFolder() && PersistenceManager.TCREF_EXT.equals(fo.getExt())) {
            log("processDataOrFolderCreated TCREF ADD");
                addTCRef(parent2.getName(), parent1.getName(), fo.getName());
                return;
            }
        }
    }
    
    public void fileDeleted (FileEvent fe) {
        FileObject fo = fe.getFile();
        //log("fileDeleted ENTER fo: " + fo
        //+ " isFolder:" + fo.isFolder());
        boolean accepted = acceptEvent(fo);
        if (!accepted) {
            return;
        }
        
        log("fileDeleted fo: " + fo
        + " isFolder:" + fo.isFolder()
        + " isValid:" + fo.isValid()
        + " ACCEPTED");
        //+ " th:" + Thread.currentThread().getName());
        
        if (fo.getPath().equals(rootFolder.getPath()) || fo.getPath().equals(wmFolder.getPath())) {
            log("fileDeleted REMOVE ALL WORKSPACES");
            removeAllWorkspaces();
            return;
        }
        FileObject parent1 = fo.getParent();
        if (parent1.getPath().equals(wmFolder.getPath())) {
            /*if (!fo.isFolder() && ImportManager.WORKSPACE_EXT.equals(fo.getExt())) {
                log("fileDeleted WORKSPACE REMOVE");
                removeWorkspace(fo.getName());
                return;
            } else */
            if (fo.isFolder()) {
                log("fileDeleted REMOVE WORKSPACE:" + fo.getName());
                removeWorkspace(fo.getName());
                return;
            }
        }
        //Component settings file was removed
        if (parent1.getPath().equals(compsFolder.getPath())) {
            if (!fo.isFolder() && "settings".equals(fo.getExt())) { // NOI18N
                log("fileDeleted COMPONENT REMOVE fo:" + fo.getName());
                removeComponent(fo.getName());
                return;
            }
        }
        FileObject parent2 = parent1.getParent();
        if (parent2.getPath().equals(wmFolder.getPath())) {
            /*if (!fo.isFolder() && PersistenceManager.MODE_EXT.equals(fo.getExt())) {
                log("fileDeleted MODE REMOVE");
                removeMode(parent1.getName(), fo.getName());
                return;
            } else */
            if (fo.isFolder()) {
                log("fileDeleted REMOVE MODE ws:" + parent1.getName() + " mo:" + fo.getName());
                removeMode(parent1.getName(), fo.getName());
                return;
            }
        }
        FileObject parent3 = parent2.getParent();
        if (parent3.getPath().equals(wmFolder.getPath())) {
            if (!fo.isFolder() && PersistenceManager.TCREF_EXT.equals(fo.getExt())) {
                log("fileDeleted tcRef REMOVE");
                removeTCRef(parent2.getName(), parent1.getName(), fo.getName());
                return;
            }
        }
    }
    
    public void fileRenamed (FileRenameEvent fe) {
    }
    
    private void addAllWorkspaces () {
        log("addAllWorkspaces ENTER");
        ImportManager.getDefault().addConfigurationData();
        log("addAllWorkspaces LEAVE");
    }
    
    private void addWorkspace (String workspaceName) {
        log("addWorkspace ENTER" + " ws:" + workspaceName);
        ImportManager.getDefault().addWorkspace(workspaceName);
        log("addWorkspace LEAVE" + " ws:" + workspaceName);
    }
    
    private void addMode (String workspaceName, String modeName) {
        log("addMode ENTER" + " ws:" + workspaceName + " mo:" + modeName);
        ImportManager.getDefault().addMode(workspaceName,modeName);
        log("addMode LEAVE" + " ws:" + workspaceName + " mo:" + modeName);
    }
    
    private void addTCRef (String workspaceName, String modeName, String tcRefName) {
        log("addTCRef ENTER" + " ws:" + workspaceName + " modeName:" + modeName
        + " tcRefName:" + tcRefName);
        ImportManager.getDefault().addTCRef(workspaceName,modeName,tcRefName);
        log("addTCRef LEAVE" + " ws:" + workspaceName + " modeName:" + modeName
        + " tcRefName:" + tcRefName);
    }
    
    private void removeAllWorkspaces () {
        log("removeAllWorkspaces ENTER");
        WindowManagerParserOld wmParser = ImportManager.getDefault().getWindowManagerParserOld();
        wmParser.removeAllWorkspaces();
        log("removeAllWorkspaces LEAVE");
    }
    
    private void removeWorkspace (String workspaceName) {
        log("removeWorkspace ENTER" + " ws:" + workspaceName);
        WindowManagerParserOld wmParser = ImportManager.getDefault().getWindowManagerParserOld();
        wmParser.removeWorkspace(workspaceName);
        log("removeWorkspace LEAVE" + " ws:" + workspaceName);
    }
    
    private void removeMode (String workspaceName, String modeName) {
        log("removeMode ENTER" + " ws:" + workspaceName + " mo:" + modeName);
        WindowManagerParserOld wmParser = ImportManager.getDefault().getWindowManagerParserOld();
        wmParser.removeMode(workspaceName,modeName);
        log("removeMode LEAVE" + " ws:" + workspaceName + " mo:" + modeName);
    }
    
    private void removeTCRef (String workspaceName, String modeName, String tcRefName) {
        log("removeTCRef ENTER" + " ws:" + workspaceName + " modeName:" + modeName
        + " tcRefName:" + tcRefName);
        WindowManagerParserOld wmParser = ImportManager.getDefault().getWindowManagerParserOld();
        wmParser.removeTCRef(workspaceName,modeName,tcRefName);
        log("removeTCRef LEAVE" + " ws:" + workspaceName + " modeName:" + modeName
        + " tcRefName:" + tcRefName);
    }
    
    private void removeComponent (String compName) {
        log("removeComponent ENTER comp:" + compName);
        PersistenceManager.getDefault().removeUsedTCId(compName);
        //XXX Delete localy copied settings file
        PersistenceManager pm = PersistenceManager.getDefault();
        FileObject toBeDeleted = pm.getComponentsLocalFolder().getFileObject(compName,"settings"); // NOI18N
        if (toBeDeleted != null) {
            log("removeComponent DELETE fo:" + toBeDeleted);
            PersistenceManager.deleteOneFO(toBeDeleted);
        }
        log("removeComponent LEAVE comp:" + compName);
    }
    
    void log (String s) {
        Debug.log(ModuleChangeHandlerOld.class, s);
    }
    
}
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.