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    
021    package org.granite.generator.as3;
022    
023    import java.util.List;
024    
025    
026    /**
027     * @author Franck WOLFF
028     */
029    public 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    }