• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.eclipse.org/org/documents/epl-v10.php
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.android.ide.common.layout;
17 
18 import static com.android.ide.common.layout.LayoutConstants.ANDROID_URI;
19 import static com.android.ide.common.layout.LayoutConstants.ATTR_ID;
20 
21 import com.android.ide.common.api.IAttributeInfo;
22 import com.android.ide.common.api.INode;
23 import com.android.ide.common.api.INodeHandler;
24 import com.android.ide.common.api.Margins;
25 import com.android.ide.common.api.Rect;
26 
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.HashMap;
30 import java.util.List;
31 import java.util.Map;
32 
33 /** Test/mock implementation of {@link INode} */
34 public class TestNode implements INode {
35     private TestNode mParent;
36 
37     private final List<TestNode> mChildren = new ArrayList<TestNode>();
38 
39     private final String mFqcn;
40 
41     private Rect mBounds = new Rect(); // Invalid bounds initially
42 
43     private Map<String, IAttribute> mAttributes = new HashMap<String, IAttribute>();
44 
45     private Map<String, IAttributeInfo> mAttributeInfos = new HashMap<String, IAttributeInfo>();
46 
47     private List<String> mAttributeSources;
48 
TestNode(String fqcn)49     public TestNode(String fqcn) {
50         this.mFqcn = fqcn;
51     }
52 
bounds(Rect bounds)53     public TestNode bounds(Rect bounds) {
54         this.mBounds = bounds;
55 
56         return this;
57     }
58 
id(String id)59     public TestNode id(String id) {
60         return set(ANDROID_URI, ATTR_ID, id);
61     }
62 
set(String uri, String name, String value)63     public TestNode set(String uri, String name, String value) {
64         setAttribute(uri, name, value);
65 
66         return this;
67     }
68 
add(TestNode child)69     public TestNode add(TestNode child) {
70         mChildren.add(child);
71         child.mParent = this;
72 
73         return this;
74     }
75 
add(TestNode... children)76     public TestNode add(TestNode... children) {
77         for (TestNode child : children) {
78             mChildren.add(child);
79             child.mParent = this;
80         }
81 
82         return this;
83     }
84 
create(String fcqn)85     public static TestNode create(String fcqn) {
86         return new TestNode(fcqn);
87     }
88 
removeChild(int index)89     public void removeChild(int index) {
90         TestNode removed = mChildren.remove(index);
91         removed.mParent = null;
92     }
93 
94     // ==== INODE ====
95 
96     @Override
appendChild(String viewFqcn)97     public INode appendChild(String viewFqcn) {
98         return insertChildAt(viewFqcn, mChildren.size());
99     }
100 
101     @Override
editXml(String undoName, INodeHandler callback)102     public void editXml(String undoName, INodeHandler callback) {
103         callback.handle(this);
104     }
105 
putAttributeInfo(String uri, String attrName, IAttributeInfo info)106     public void putAttributeInfo(String uri, String attrName, IAttributeInfo info) {
107         mAttributeInfos.put(uri + attrName, info);
108     }
109 
110     @Override
getAttributeInfo(String uri, String attrName)111     public IAttributeInfo getAttributeInfo(String uri, String attrName) {
112         return mAttributeInfos.get(uri + attrName);
113     }
114 
115     @Override
getBounds()116     public Rect getBounds() {
117         return mBounds;
118     }
119 
120     @Override
getChildren()121     public INode[] getChildren() {
122         return mChildren.toArray(new INode[mChildren.size()]);
123     }
124 
125     @Override
getDeclaredAttributes()126     public IAttributeInfo[] getDeclaredAttributes() {
127         return mAttributeInfos.values().toArray(new IAttributeInfo[mAttributeInfos.size()]);
128     }
129 
130     @Override
getFqcn()131     public String getFqcn() {
132         return mFqcn;
133     }
134 
135     @Override
getLiveAttributes()136     public IAttribute[] getLiveAttributes() {
137         return mAttributes.values().toArray(new IAttribute[mAttributes.size()]);
138     }
139 
140     @Override
getParent()141     public INode getParent() {
142         return mParent;
143     }
144 
145     @Override
getRoot()146     public INode getRoot() {
147         TestNode curr = this;
148         while (curr.mParent != null) {
149             curr = curr.mParent;
150         }
151 
152         return curr;
153     }
154 
155     @Override
getStringAttr(String uri, String attrName)156     public String getStringAttr(String uri, String attrName) {
157         IAttribute attr = mAttributes.get(uri + attrName);
158         if (attr == null) {
159             return null;
160         }
161 
162         return attr.getValue();
163     }
164 
165     @Override
insertChildAt(String viewFqcn, int index)166     public INode insertChildAt(String viewFqcn, int index) {
167         TestNode child = new TestNode(viewFqcn);
168         if (index == -1) {
169             mChildren.add(child);
170         } else {
171             mChildren.add(index, child);
172         }
173         child.mParent = this;
174         return child;
175     }
176 
177     @Override
removeChild(INode node)178     public void removeChild(INode node) {
179         int index = mChildren.indexOf(node);
180         if (index != -1) {
181             removeChild(index);
182         }
183     }
184 
185     @Override
setAttribute(String uri, String localName, String value)186     public boolean setAttribute(String uri, String localName, String value) {
187         mAttributes.put(uri + localName, new TestAttribute(uri, localName, value));
188         return true;
189     }
190 
191     @Override
toString()192     public String toString() {
193         return "TestNode [fqn=" + mFqcn + ", infos=" + mAttributeInfos
194                 + ", attributes=" + mAttributes + ", bounds=" + mBounds + "]";
195     }
196 
197     @Override
getBaseline()198     public int getBaseline() {
199         return -1;
200     }
201 
202     @Override
getMargins()203     public Margins getMargins() {
204         return null;
205     }
206 
207     @Override
getAttributeSources()208     public List<String> getAttributeSources() {
209         return mAttributeSources != null ? mAttributeSources : Collections.<String>emptyList();
210     }
211 
setAttributeSources(List<String> attributeSources)212     public void setAttributeSources(List<String> attributeSources) {
213         mAttributeSources = attributeSources;
214     }
215 }