1e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount/* 2e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * Copyright (C) 2015 The Android Open Source Project 3e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * 4e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * Licensed under the Apache License, Version 2.0 (the "License"); 5e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * you may not use this file except in compliance with the License. 6e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * You may obtain a copy of the License at 7e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * 8e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * http://www.apache.org/licenses/LICENSE-2.0 9e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * 10e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * Unless required by applicable law or agreed to in writing, software 11e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * distributed under the License is distributed on an "AS IS" BASIS, 12e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * See the License for the specific language governing permissions and 14e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount * limitations under the License. 15e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount */ 16e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountpackage android.databinding.tool.writer; 17e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 18a128d1c99ea98bb48c45d648906652e3d618d513George Mountimport android.databinding.tool.reflection.ModelAnalyzer; 19a128d1c99ea98bb48c45d648906652e3d618d513George Mountimport android.databinding.tool.store.SetterStore; 20e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 21e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountimport java.util.List; 22a128d1c99ea98bb48c45d648906652e3d618d513George Mountimport java.util.Map; 23e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 24e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mountpublic class ComponentWriter { 25e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount private static final String INDENT = " "; 26e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 27a128d1c99ea98bb48c45d648906652e3d618d513George Mount public ComponentWriter() { 28e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 29e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 30e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount public String createComponent() { 31e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount final StringBuilder builder = new StringBuilder(); 32e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount builder.append("package android.databinding;\n\n"); 33e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount builder.append("public interface DataBindingComponent {\n"); 34a128d1c99ea98bb48c45d648906652e3d618d513George Mount final SetterStore setterStore = SetterStore.get(ModelAnalyzer.getInstance()); 35a128d1c99ea98bb48c45d648906652e3d618d513George Mount Map<String, List<String>> bindingAdapters = setterStore.getComponentBindingAdapters(); 36a128d1c99ea98bb48c45d648906652e3d618d513George Mount for (final String simpleName : bindingAdapters.keySet()) { 37a128d1c99ea98bb48c45d648906652e3d618d513George Mount final List<String> classes = bindingAdapters.get(simpleName); 38e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount if (classes.size() > 1) { 39e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount int index = 1; 40e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount for (String className : classes) { 41e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount addGetter(builder, simpleName, className, index++); 42e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 43e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } else { 44e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount addGetter(builder, simpleName, classes.iterator().next(), 0); 45e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 46e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 47e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount builder.append("}\n"); 48e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount return builder.toString(); 49e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 50e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount 51e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount private static void addGetter(StringBuilder builder, String simpleName, String className, 52e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount int index) { 53e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount builder.append(INDENT) 54e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount .append(className) 55e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount .append(" get") 56e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount .append(simpleName); 57e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount if (index > 0) { 58e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount builder.append(index); 59e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 60e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount builder.append("();\n"); 61e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount } 62e4cd38824a6627b9fef229c549c636e35ad63b5fGeorge Mount} 63