    001    /*
    002     * Licensed to the Apache Software Foundation (ASF) under one or more
    003     * contributor license agreements.  See the NOTICE file distributed with
    004     * this work for additional information regarding copyright ownership.
    005     * The ASF licenses this file to You under the Apache License, Version 2.0
    006     * (the "License"); you may not use this file except in compliance with
    007     * the License.  You may obtain a copy of the License at
    008     *
    009     *      http://www.apache.org/licenses/LICENSE-2.0
    010     *
    011     * Unless required by applicable law or agreed to in writing, software
    012     * distributed under the License is distributed on an "AS IS" BASIS,
    013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014     * See the License for the specific language governing permissions and
    015     * limitations under the License.
    016     */
    017
    018    package org.apache.commons.jci.utils;
    019
    020    import java.io.File;
    021    import java.util.Locale;
    022
    023    /**
    024     * Mainly common path manipultation helper methods
    025     * NOT FOR USE OUTSIDE OF JCI
    026     *
    027     * @author tcurdt
    028     */
    029    public final class ConversionUtils {
    030
    031        /**
    032         * Please do not use - internal
    033         * org/my/Class.xxx -> org.my.Class
    034         */
    035        public static String convertResourceToClassName( final String pResourceName ) {
    036            return ConversionUtils.stripExtension(pResourceName).replace('/', '.');
    037        }
    038
    039        /**
    040         * Please do not use - internal
    041         * org.my.Class -> org/my/Class.class
    042         */
    043        public static String convertClassToResourcePath( final String pName ) {
    044            return pName.replace('.', '/') + ".class";
    045        }
    046
    047        /**
    048         * Please do not use - internal
    049         * org/my/Class.xxx -> org/my/Class
    050         */
    051        public static String stripExtension( final String pResourceName ) {
    052            final int i = pResourceName.lastIndexOf('.');
    053            if (i < 0) {
    054                return pResourceName;
    055            }
    056            final String withoutExtension = pResourceName.substring(0, i);
    057            return withoutExtension;
    058        }
    059
    060        public static String toJavaCasing(final String pName) {
    061            final char[] name = pName.toLowerCase(Locale.US).toCharArray();
    062            name[0] = Character.toUpperCase(name[0]);
    063            return new String(name);
    064        }
    065
    066    /*
    067        public static String clazzName( final File base, final File file ) {
    068            final int rootLength = base.getAbsolutePath().length();
    069            final String absFileName = file.getAbsolutePath();
    070            final int p = absFileName.lastIndexOf('.');
    071            final String relFileName = absFileName.substring(rootLength + 1, p);
    072            final String clazzName = relFileName.replace(File.separatorChar, '.');
    073            return clazzName;
    074        }
    075    */
    076        public static String relative( final File base, final File file ) {
    077            final int rootLength = base.getAbsolutePath().length();
    078            final String absFileName = file.getAbsolutePath();
    079            final String relFileName = absFileName.substring(rootLength + 1);
    080            return relFileName;
    081        }
    082
    083        /**
    084         * a/b/c.java -> a/b/c.java
    085         * a\b\c.java -> a/b/c.java
    086         * @param pFileName
    087         * @return the converted name
    088         */
    089        public static String getResourceNameFromFileName( final String pFileName ) {
    090            if ('/' == File.separatorChar) {
    091                return pFileName;
    092            }
    093
    094            return pFileName.replace(File.separatorChar, '/');
    095        }
    096
    097    }