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