1a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet/*
2a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * Copyright (C) 2011 The Android Open Source Project
3a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet *
4a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * Licensed under the Apache License, Version 2.0 (the "License");
5a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * you may not use this file except in compliance with the License.
6a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * You may obtain a copy of the License at
7a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet *
8a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet *      http://www.apache.org/licenses/LICENSE-2.0
9a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet *
10a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * Unless required by applicable law or agreed to in writing, software
11a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * distributed under the License is distributed on an "AS IS" BASIS,
12a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * See the License for the specific language governing permissions and
14a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * limitations under the License.
15a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet */
16a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
17a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohetpackage com.android.ide.common.rendering.api;
18a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
19a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohetimport com.android.resources.ResourceType;
20a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
21a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohetimport java.util.ArrayList;
22a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohetimport java.util.Collections;
23a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohetimport java.util.Iterator;
24a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohetimport java.util.List;
25a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
26a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet/**
27a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * A data binding item. It contain a {@link ResourceReference} to the view used to represent it.
28a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * It also contains how many items of this type the AdapterView should display.
29a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet *
30a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * It can also contain an optional list of children in case the AdapterView is an
31a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * ExpandableListView. In this case, the count value is used as a repeat count for the children,
32a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet * similar to {@link AdapterBinding#getRepeatCount()}.
33a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet *
34a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet */
35a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohetpublic class DataBindingItem implements Iterable<DataBindingItem> {
36a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    private final ResourceReference mReference;
37a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    private final int mCount;
38a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    private List<DataBindingItem> mChildren;
39a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
40a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    public DataBindingItem(ResourceReference reference, int count) {
41a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        mReference = reference;
42a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        mCount = count;
43a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    }
44a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
45a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    public DataBindingItem(String name, boolean platformLayout, int count) {
46a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        this(new ResourceReference(name, platformLayout), count);
47a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    }
48a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
49a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    public DataBindingItem(String name, boolean platformLayout) {
50a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        this(name, platformLayout, 1);
51a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    }
52a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
53a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    public DataBindingItem(String name, int count) {
54a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        this(name, false /*platformLayout*/, count);
55a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    }
56a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
57a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    public DataBindingItem(String name) {
58a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        this(name, false /*platformLayout*/, 1);
59a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    }
60a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
61a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    /**
62a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet     * Returns the {@link ResourceReference} for the view. The {@link ResourceType} for the
63a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet     * referenced resource is implied to be {@link ResourceType#LAYOUT}.
64a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet     */
65a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    public ResourceReference getViewReference() {
66a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        return mReference;
67a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    }
68a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
69a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    /**
70a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet     * The repeat count for this object or the repeat count for the children if there are any.
71a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet     */
72a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    public int getCount() {
73a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        return mCount;
74a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    }
75a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
76a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    public void addChild(DataBindingItem child) {
77a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        if (mChildren == null) {
78a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet            mChildren = new ArrayList<DataBindingItem>();
79a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        }
80a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
81a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        mChildren.add(child);
82a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    }
83a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
84a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    public List<DataBindingItem> getChildren() {
85a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        if (mChildren != null) {
86a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet            return mChildren;
87a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        }
88a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
89a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        return Collections.emptyList();
90a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    }
91a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet
92ab36f4e7488358dea4ab6b54ee2b7bef3da0232bTor Norbye    @Override
93a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    public Iterator<DataBindingItem> iterator() {
94a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        List<DataBindingItem> list = getChildren();
95a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet        return list.iterator();
96a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet    }
97a43a67bcda2200a18879ee649287aa9ff4c46509Xavier Ducrohet}
98