001/**
002 *   GRANITE DATA SERVICES
003 *   Copyright (C) 2006-2014 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 */
022package org.granite.generator.as3;
023
024import java.util.List;
025
026
027/**
028 * @author Franck WOLFF
029 */
030public class PackageTranslator {
031
032    private String java = null;
033    private String as3 = null;
034    private int weight = -1;
035
036    public PackageTranslator() {
037    }
038
039    public PackageTranslator(String java, String as3) {
040        setJava(java);
041        setAs3(as3);
042    }
043
044    public String getJava() {
045        return java;
046    }
047    public void setJava(String java) {
048        this.java = java;
049        this.weight = (java != null ? java.split("\\Q.\\E", -1).length : -1);
050    }
051
052    public String getAs3() {
053        return as3;
054    }
055    public void setAs3(String as3) {
056        this.as3 = as3;
057    }
058    
059    public String getClient() {
060        return as3;
061    }
062    public void setClient(String client) {
063        this.as3 = client;
064    }
065
066    public int getWeight() {
067        return weight;
068    }
069
070    public boolean isValid() {
071        return java != null && java.length() > 0 && as3 != null && as3.length() > 0;
072    }
073
074    /* (non-Javadoc)
075         * @see org.granite.generator.as3.PackageTranslator#match(java.lang.String)
076         */
077    public int match(String pkg) {
078        if (!pkg.startsWith(java))
079            return 0;
080        if (pkg.equals(java))
081            return Integer.MAX_VALUE;
082        return weight;
083    }
084
085    /* (non-Javadoc)
086         * @see org.granite.generator.as3.PackageTranslator#translate(java.lang.String)
087         */
088    public String translate(String pkg) {
089        return as3 + pkg.substring(java.length());
090    }
091    
092    public static PackageTranslator forPackage(List<PackageTranslator> translators, String packageName) {
093        PackageTranslator translator = null;
094
095        int weight = 0;
096        for (PackageTranslator t : translators) {
097            int w = t.match(packageName);
098            if (w > weight) {
099                weight = w;
100                translator = t;
101            }
102        }
103                
104        return translator;
105    }
106
107    @Override
108    public int hashCode() {
109        return (java != null ? java.hashCode() : 0);
110    }
111
112    @Override
113    public boolean equals(Object o) {
114        if (o == this)
115            return true;
116        if (!(o instanceof PackageTranslator))
117            return false;
118        return (
119            java == null ?
120            ((PackageTranslator)o).java == null :
121            java.equals(((PackageTranslator)o).java)
122        );
123    }
124
125    @Override
126    public String toString() {
127        return getClass().getName() + "{java=\"" + java + "\", as=\"" + as3 + "\"}";
128    }
129}