Package er.fsadaptor

Source Code of er.fsadaptor.FSQualifierHandler$FileProxy

package er.fsadaptor;

import java.io.File;

import com.webobjects.eocontrol.EOAndQualifier;
import com.webobjects.eocontrol.EOKeyValueQualifier;
import com.webobjects.eocontrol.EONotQualifier;
import com.webobjects.eocontrol.EOOrQualifier;
import com.webobjects.eocontrol.EOQualifier;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSMutableSet;

public abstract class FSQualifierHandler {
    public static boolean debug = "YES".equals(System.getProperty("FSAdaptorDebuggingEnabled"));

    private static final String[] HandlerNames = { "er.fsadaptor.FSQualifierHandler$And", "er.fsadaptor.FSQualifierHandler$Or", "er.fsadaptor.FSQualifierHandler$Not",
            "er.fsadaptor.FSQualifierHandler$KeyValue" };

    private static FSQualifierHandler[] _handlers = null;

    private static String rootDirectory = "";

    public static class FileProxy extends java.io.File {
        public FileProxy(String path) {
            super(path);
        }

        @Override
        public String getParent() {
            return getRealParent().substring(rootDirectory.length());
        }

        public String getRealParent() {
            return super.getParent();
        }
    }

    private static File fileWithPath(String path) {
        if (rootDirectory != null && rootDirectory.length() > 0)
            path = rootDirectory + File.separator + path;
        if (debug)
            System.out.println("FSQualifierHandler.fileWithPath: " + path);
        return new File(path);
    }

    private static final class KeyValue extends FSQualifierHandler {
        private static final String[] PathKeys = { "absolutePath", "canonicalPath", "path" };

        private static final int PathKeysCount = PathKeys.length;

        private static final String ParentPathKey = "parent";

        protected KeyValue() {
            /* empty */
        }

        @Override
        protected Class type() {
            return EOKeyValueQualifier.class;
        }

        private void addFileWithQualifierToSet(EOKeyValueQualifier aQualifier, NSMutableSet<File> aSet) {
            if (aQualifier != null) {
                if (aSet != null) {
                    String aKey = aQualifier.key();
                    for (int index = 0; index < PathKeysCount; index++) {
                        if (aKey.equals(PathKeys[index])) {
                            String aPath = aQualifier.value().toString();
                            File aFile = fileWithPath(aPath);
                            if (aFile.exists())
                                aSet.addObject(aFile);
                            if (debug)
                                System.out.println("EOKeyValueQualifier.addFileWithQualifierToSet: " + aFile);
                            break;
                        }
                    }
                    return;
                }
                throw new IllegalArgumentException("FSQualifierHandler.KeyValue.addFileWithQualifierToSet: null set.");
            }
            throw new IllegalArgumentException("FSQualifierHandler.KeyValue.addFileWithQualifierToSet: null qualifier.");
        }

        private void addParentFilesWithQualifierToSet(EOKeyValueQualifier aQualifier, NSMutableSet<File> aSet) {
            if (aQualifier != null) {
                if (aSet != null) {
                    String aKey = aQualifier.key();
                    if (aKey.equals(ParentPathKey)) {
                        String aPath = aQualifier.value().toString();
                        File aFile = fileWithPath(aPath);
                        if (aFile.exists() && aFile.isDirectory()) {
                            File[] someFiles = aFile.listFiles();
                            if (someFiles != null && someFiles.length > 0) {
                                NSArray<File> files = new NSArray<File>(someFiles);
                                aSet.addObjectsFromArray(files);
                                if (debug)
                                    System.out.println("EOKeyValueQualifier.addParentFilesWithQualifierToSet: " + files);
                            }
                        }
                    }
                    return;
                }
                throw new IllegalArgumentException("FSQualifierHandler.KeyValue.addParentFilesWithQualifierToSet: null set.");
            }
            throw new IllegalArgumentException("FSQualifierHandler.KeyValue.addParentFilesWithQualifierToSet: null qualifier.");
        }

        @Override
        protected void addFilesMatchingQualifierToSet(EOQualifier aQualifier, NSMutableSet<File> aSet) {
            if (aQualifier != null) {
                if (aSet != null) {
                    addFileWithQualifierToSet((EOKeyValueQualifier) aQualifier, aSet);
                    addParentFilesWithQualifierToSet(((EOKeyValueQualifier) aQualifier), aSet);
                    return;
                }
                throw new IllegalArgumentException("FSQualifierHandler.KeyValue.addFilesMatchingQualifierToSet: null set.");
            }
            throw new IllegalArgumentException("FSQualifierHandler.KeyValue.addFilesMatchingQualifierToSet: null qualifier.");
        }
    }

    private static final class Not extends FSQualifierHandler {
        protected Not() {
            /* empty */
        }

        @Override
        protected Class type() {
            return EONotQualifier.class;
        }

        @Override
        protected void addFilesMatchingQualifierToSet(EOQualifier aQualifier, NSMutableSet<File> aSet) {
            if (aQualifier != null) {
                if (aSet != null) {
                    FSQualifierHandler.addFilesWithQualifierToSet(((EONotQualifier) aQualifier).qualifier(), aSet);
                    return;
                }
                throw new IllegalArgumentException("FSQualifierHandler.Not.addFilesMatchingQualifierToSet: null set.");
            }
            throw new IllegalArgumentException("FSQualifierHandler.Not.addFilesMatchingQualifierToSet: null qualifier.");
        }
    }

    private static final class Or extends FSQualifierHandler {
        protected Or() {
            /* empty */
        }

        @Override
        protected Class type() {
            return EOOrQualifier.class;
        }

        @Override
        protected void addFilesMatchingQualifierToSet(EOQualifier aQualifier, NSMutableSet<File> aSet) {
            if (aQualifier != null) {
                if (aSet != null) {
                    NSArray<EOQualifier> someQualifiers = ((EOOrQualifier) aQualifier).qualifiers();
                    if (someQualifiers != null) {
                        int count = someQualifiers.count();
                        for (int index = 0; index < count; index++) {
                            EOQualifier anotherQualifier = someQualifiers.objectAtIndex(index);
                            FSQualifierHandler.addFilesWithQualifierToSet(anotherQualifier, aSet);
                        }
                    }
                    return;
                }
                throw new IllegalArgumentException("FSQualifierHandler.Or.addFilesMatchingQualifierToSet: null set.");
            }
            throw new IllegalArgumentException("FSQualifierHandler.Or.addFilesMatchingQualifierToSet: null qualifier.");
        }
    }

    private static final class And extends FSQualifierHandler {
        protected And() {
            /* empty */
        }

        @Override
        protected Class type() {
            return EOAndQualifier.class;
        }

        @Override
        protected void addFilesMatchingQualifierToSet(EOQualifier aQualifier, NSMutableSet<File> aSet) {
            if (aQualifier != null) {
                if (aSet != null) {
                    NSArray<EOQualifier> someQualifiers = ((EOAndQualifier) aQualifier).qualifiers();
                    if (someQualifiers != null) {
                        int count = someQualifiers.count();
                        for (int index = 0; index < count; index++) {
                            EOQualifier anotherQualifier = someQualifiers.objectAtIndex(index);
                            FSQualifierHandler.addFilesWithQualifierToSet(anotherQualifier, aSet);
                        }
                    }
                    return;
                }
                throw new IllegalArgumentException("FSQualifierHandler.And.addFilesMatchingQualifierToSet: null set.");
            }
            throw new IllegalArgumentException("FSQualifierHandler.And.addFilesMatchingQualifierToSet: null qualifier.");
        }
    }

    protected FSQualifierHandler() {
        /* empty */
    }

    private static FSQualifierHandler[] handlers() {
        return _handlers;
    }

    static NSArray<File> filesWithQualifier(EOQualifier aQualifier, String root) {
        if (aQualifier != null) {
            rootDirectory = root;
            if (debug)
                System.out.println("FSQualifierHandler.rootDirectory: " + rootDirectory);
            NSMutableSet<File> aSet = new NSMutableSet<File>();
            addFilesWithQualifierToSet(aQualifier, aSet);
            if (aSet.count() > 0) {
                NSArray<File> anArray = EOQualifier.filteredArrayWithQualifier(aSet.allObjects(), aQualifier);
                if (anArray != null && anArray.count() > 0) {
                    if (debug)
                        System.out.println("FSQualifierHandler.filesWithQualifier: " + anArray);
                    return anArray;
                }
            }
            return null;
        }
        if (root != null) {
            File aFile = fileWithPath("");
            if (aFile.exists() && aFile.isDirectory()) {
                return new NSArray<File>(aFile.listFiles());
            }
            return null;
        }
        throw new IllegalArgumentException("FSQualifierHandler.filesWithQualifier: null qualifier.");
    }

    private static void addFilesWithQualifierToSet(EOQualifier aQualifier, NSMutableSet<File> aSet) {
        if (aQualifier != null) {
            if (aSet != null) {
                FSQualifierHandler[] someHandlers = handlers();
                int count = someHandlers.length;
                for (int index = 0; index < count; index++) {
                    FSQualifierHandler anHandler = someHandlers[index];
                    if (anHandler.canHandleQualifier(aQualifier)) {
                        anHandler.addFilesMatchingQualifierToSet(aQualifier, aSet);
                        break;
                    }
                }
                return;
            }
            throw new IllegalArgumentException("FSQualifierHandler.addFilesWithQualifierToSet: null set.");
        }
        throw new IllegalArgumentException("FSQualifierHandler.addFilesWithQualifierToSet: null qualifier.");
    }

    boolean canHandleQualifier(EOQualifier aQualifier) {
        if (aQualifier != null) {
            Class aType = type();
            if (aType != null)
                return aType.isAssignableFrom(aQualifier.getClass());
            throw new IllegalStateException("FSQualifierHandler.canHandleQualifier: null type.");
        }
        throw new IllegalArgumentException("FSQualifierHandler.canHandleQualifier: null qualifier.");
    }

    protected abstract Class type();

    protected abstract void addFilesMatchingQualifierToSet(EOQualifier eoqualifier, NSMutableSet<File> nsmutableset);

    static {
        String[] someHandlerNames = HandlerNames;
        int count = someHandlerNames.length;
        _handlers = new FSQualifierHandler[count];
        for (int index = 0; index < count; index++) {
            String aClassName = someHandlerNames[index];
            try {
                Class aClass = Class.forName(aClassName);
                FSQualifierHandler anHandler = (FSQualifierHandler) aClass.newInstance();
                _handlers[index] = anHandler;
            } catch (Exception anException) {
                throw new RuntimeException("SZDocumentDecoder.handlers: " + anException);
            }
        }
    }
}
TOP

Related Classes of er.fsadaptor.FSQualifierHandler$FileProxy

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.