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