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