001/**
002 *   GRANITE DATA SERVICES
003 *   Copyright (C) 2006-2013 GRANITE DATA SERVICES S.A.S.
004 *
005 *   This file is part of the Granite Data Services Platform.
006 *
007 *   Granite Data Services is free software; you can redistribute it and/or
008 *   modify it under the terms of the GNU Lesser General Public
009 *   License as published by the Free Software Foundation; either
010 *   version 2.1 of the License, or (at your option) any later version.
011 *
012 *   Granite Data Services is distributed in the hope that it will be useful,
013 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
014 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
015 *   General Public License for more details.
016 *
017 *   You should have received a copy of the GNU Lesser General Public
018 *   License along with this library; if not, write to the Free Software
019 *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
020 *   USA, or see <http://www.gnu.org/licenses/>.
021 */
022
023package org.granite.generator.as3;
024
025import java.util.List;
026
027
028/**
029 * @author Franck WOLFF
030 */
031public class PackageTranslator {
032
033    private String java = null;
034    private String as3 = null;
035    private int weight = -1;
036
037    public PackageTranslator() {
038    }
039
040    public PackageTranslator(String java, String as3) {
041        setJava(java);
042        setAs3(as3);
043    }
044
045    public String getJava() {
046        return java;
047    }
048    public void setJava(String java) {
049        this.java = java;
050        this.weight = (java != null ? java.split("\\Q.\\E", -1).length : -1);
051    }
052
053    public String getAs3() {
054        return as3;
055    }
056    public void setAs3(String as3) {
057        this.as3 = as3;
058    }
059    
060    public String getClient() {
061        return as3;
062    }
063    public void setClient(String client) {
064        this.as3 = client;
065    }
066
067    public int getWeight() {
068        return weight;
069    }
070
071    public boolean isValid() {
072        return java != null && java.length() > 0 && as3 != null && as3.length() > 0;
073    }
074
075    /* (non-Javadoc)
076         * @see org.granite.generator.as3.PackageTranslator#match(java.lang.String)
077         */
078    public int match(String pkg) {
079        if (!pkg.startsWith(java))
080            return 0;
081        if (pkg.equals(java))
082            return Integer.MAX_VALUE;
083        return weight;
084    }
085
086    /* (non-Javadoc)
087         * @see org.granite.generator.as3.PackageTranslator#translate(java.lang.String)
088         */
089    public String translate(String pkg) {
090        return as3 + pkg.substring(java.length());
091    }
092    
093    public static PackageTranslator forPackage(List<PackageTranslator> translators, String packageName) {
094        PackageTranslator translator = null;
095
096        int weight = 0;
097        for (PackageTranslator t : translators) {
098            int w = t.match(packageName);
099            if (w > weight) {
100                weight = w;
101                translator = t;
102            }
103        }
104                
105        return translator;
106    }
107
108    @Override
109    public int hashCode() {
110        return (java != null ? java.hashCode() : 0);
111    }
112
113    @Override
114    public boolean equals(Object o) {
115        if (o == this)
116            return true;
117        if (!(o instanceof PackageTranslator))
118            return false;
119        return (
120            java == null ?
121            ((PackageTranslator)o).java == null :
122            java.equals(((PackageTranslator)o).java)
123        );
124    }
125
126    @Override
127    public String toString() {
128        return getClass().getName() + "{java=\"" + java + "\", as=\"" + as3 + "\"}";
129    }
130}