Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/* jCAE stand for Java Computer Aided Engineering. Features are : Small CAD
 modeler, Finite element mesher, Plugin architecture.
    
 Copyright (C) 2003,2004,2005, by EADS CRC
 Copyright (C) 2008, by EADS France
    
 This library is free software; you can redistribute it and/or
 modify it under the terms of the GNU Lesser General Public
 License as published by the Free Software Foundation; either
 version 2.1 of the License, or (at your option) any later version.
    
 This library 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 for more details.
    
 You should have received a copy of the GNU Lesser General Public
 License along with this library; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */

import java.io.File;

import java.util.ArrayList;
import java.util.ListIterator;

public class Main {
    /** Removes useless path components.  */
    private static String canonicalize(String path) {
        String pattern = File.separator;
        if (pattern.equals("\\"))
            pattern = "\\\\";

        String[] splitted = path.split(pattern);
        ArrayList<String> pathSpec = new ArrayList<String>(splitted.length);
        for (int i = 0; i < splitted.length; i++)
            pathSpec.add(splitted[i]);
        // Warning: these steps must be performed in this exact order!
        // Step 1: Remove empty paths
        for (ListIterator<String> it = pathSpec.listIterator(); it.hasNext();) {
            String c = it.next();
            if (c.length() == 0 && it.previousIndex() > 0)
                it.remove();
        }
        // Step 2: Remove all occurrences of "."
        for (ListIterator<String> it = pathSpec.listIterator(); it.hasNext();) {
            String c = it.next();
            if (c.equals("."))
                it.remove();
        }
        // Step 3: Remove all occurrences of "foo/.."
        for (ListIterator<String> it = pathSpec.listIterator(); it.hasNext();) {
            String c = it.next();
            if (c.equals("..") && it.previousIndex() > 0) {
                if (it.previousIndex() == 1 && pathSpec.get(0).length() == 0) {
                    // "/.." is replaced by "/"
                    it.remove();
                } else if (!pathSpec.get(it.previousIndex() - 1).equals("..")) {
                    it.remove();
                    it.previous();
                    it.remove();
                }
            }
        }
        return listToString(pathSpec);
    }

    /** Removes useless path components.  */
    public static String canonicalize(String dir, String file) {
        if (dir != null && dir.length() > 0) {
            if (file.startsWith(dir + File.separator))
                file = file.substring(dir.length() + 1);
        }
        return canonicalize(file);
    }

    private static String listToString(ArrayList<String> pathSpec) {
        if (pathSpec.isEmpty())
            return "";
        StringBuilder ret = new StringBuilder();
        ret.append(pathSpec.get(0));
        for (int i = 1, n = pathSpec.size(); i < n; i++)
            ret.append(File.separator).append(pathSpec.get(i));
        return ret.toString();
    }
}