DataBinder.java revision 96e1c821dd446d1ed78f8ae61131550588f60a24
1d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar/* 2d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Copyright (C) 2015 The Android Open Source Project 3d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 4d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License"); 5d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * you may not use this file except in compliance with the License. 6d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * You may obtain a copy of the License at 7d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 8d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * http://www.apache.org/licenses/LICENSE-2.0 9d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * 10d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * Unless required by applicable law or agreed to in writing, software 11d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS, 12d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * See the License for the specific language governing permissions and 14d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * limitations under the License. 15d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar */ 16d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 17fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountpackage android.databinding.tool; 18fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mount 19fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.store.ResourceBundle; 20fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.util.L; 21fead9ca09b117136b35bc5bf137340a754f9edddGeorge Mountimport android.databinding.tool.writer.JavaFileWriter; 22d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 23d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport java.util.ArrayList; 243bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyarimport java.util.HashSet; 25d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarimport java.util.List; 263bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyarimport java.util.Map; 273bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyarimport java.util.Set; 28d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 29d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar/** 30d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar * The main class that handles parsing files and generating classes. 31d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar */ 32d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyarpublic class DataBinder { 33895b618d9c6e3deb56465d0759cda57f50c46214Yigit Boyar List<LayoutBinder> mLayoutBinders = new ArrayList<LayoutBinder>(); 34d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 351b9940e612fc73202837fbe9db2f9035f307b5d1George Mount private JavaFileWriter mFileWriter; 36d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 373bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar public DataBinder(ResourceBundle resourceBundle) { 383bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar L.d("reading resource bundle into data binder"); 393bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar for (Map.Entry<String, List<ResourceBundle.LayoutFileBundle>> entry : 403bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar resourceBundle.getLayoutBundles().entrySet()) { 413bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar for (ResourceBundle.LayoutFileBundle bundle : entry.getValue()) { 423bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar mLayoutBinders.add(new LayoutBinder(resourceBundle, bundle)); 435bf3700759ff21696becadd4e6fcfe2c0db6cb83Yigit Boyar } 44d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 45d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 463bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar public List<LayoutBinder> getLayoutBinders() { 473bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar return mLayoutBinders; 48d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 493bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 50dea555cf42dc3583604699c8c018d22681f56166George Mount public void writerBaseClasses(boolean isLibrary) { 51895b618d9c6e3deb56465d0759cda57f50c46214Yigit Boyar Set<String> writtenFiles = new HashSet<String>(); 523bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar for (LayoutBinder layoutBinder : mLayoutBinders) { 53dea555cf42dc3583604699c8c018d22681f56166George Mount if (isLibrary || layoutBinder.hasVariations()) { 54dea555cf42dc3583604699c8c018d22681f56166George Mount String className = layoutBinder.getClassName(); 55dea555cf42dc3583604699c8c018d22681f56166George Mount if (writtenFiles.contains(className)) { 56dea555cf42dc3583604699c8c018d22681f56166George Mount continue; 57dea555cf42dc3583604699c8c018d22681f56166George Mount } 58dea555cf42dc3583604699c8c018d22681f56166George Mount mFileWriter.writeToFile(layoutBinder.getPackage() + "." + className, 59dea555cf42dc3583604699c8c018d22681f56166George Mount layoutBinder.writeViewBinderBaseClass()); 60dea555cf42dc3583604699c8c018d22681f56166George Mount writtenFiles.add(className); 613bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 623bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar } 63d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 643bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar 6596e1c821dd446d1ed78f8ae61131550588f60a24George Mount public void writeBinders(int minSdk) { 663bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar for (LayoutBinder layoutBinder : mLayoutBinders) { 67dea555cf42dc3583604699c8c018d22681f56166George Mount String className = layoutBinder.getImplementationName(); 68dea555cf42dc3583604699c8c018d22681f56166George Mount L.d("writing data binder %s", className); 69dea555cf42dc3583604699c8c018d22681f56166George Mount mFileWriter.writeToFile(layoutBinder.getPackage() + "." + className, 7096e1c821dd446d1ed78f8ae61131550588f60a24George Mount layoutBinder.writeViewBinder(minSdk)); 71d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 72d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 73d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 741b9940e612fc73202837fbe9db2f9035f307b5d1George Mount public void setFileWriter(JavaFileWriter fileWriter) { 753bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar mFileWriter = fileWriter; 76d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 77d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar 781b9940e612fc73202837fbe9db2f9035f307b5d1George Mount public JavaFileWriter getFileWriter() { 793bd87eef217d80a233677d7e267224d0ed3c2c55Yigit Boyar return mFileWriter; 80d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar } 81d7af42b29ddf22f0068f7496c5ac6f4f34b543b6Yigit Boyar} 82