• 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 
appendChild(String viewFqcn)96     public INode appendChild(String viewFqcn) {
97         return insertChildAt(viewFqcn, mChildren.size());
98     }
99 
editXml(String undoName, INodeHandler callback)100     public void editXml(String undoName, INodeHandler callback) {
101         callback.handle(this);
102     }
103 
putAttributeInfo(String uri, String attrName, IAttributeInfo info)104     public void putAttributeInfo(String uri, String attrName, IAttributeInfo info) {
105         mAttributeInfos.put(uri + attrName, info);
106     }
107 
getAttributeInfo(String uri, String attrName)108     public IAttributeInfo getAttributeInfo(String uri, String attrName) {
109         return mAttributeInfos.get(uri + attrName);
110     }
111 
getBounds()112     public Rect getBounds() {
113         return mBounds;
114     }
115 
getChildren()116     public INode[] getChildren() {
117         return mChildren.toArray(new INode[mChildren.size()]);
118     }
119 
getDeclaredAttributes()120     public IAttributeInfo[] getDeclaredAttributes() {
121         return mAttributeInfos.values().toArray(new IAttributeInfo[mAttributeInfos.size()]);
122     }
123 
getFqcn()124     public String getFqcn() {
125         return mFqcn;
126     }
127 
getLiveAttributes()128     public IAttribute[] getLiveAttributes() {
129         return mAttributes.values().toArray(new IAttribute[mAttributes.size()]);
130     }
131 
getParent()132     public INode getParent() {
133         return mParent;
134     }
135 
getRoot()136     public INode getRoot() {
137         TestNode curr = this;
138         while (curr.mParent != null) {
139             curr = curr.mParent;
140         }
141 
142         return curr;
143     }
144 
getStringAttr(String uri, String attrName)145     public String getStringAttr(String uri, String attrName) {
146         IAttribute attr = mAttributes.get(uri + attrName);
147         if (attr == null) {
148             return null;
149         }
150 
151         return attr.getValue();
152     }
153 
insertChildAt(String viewFqcn, int index)154     public INode insertChildAt(String viewFqcn, int index) {
155         TestNode child = new TestNode(viewFqcn);
156         if (index == -1) {
157             mChildren.add(child);
158         } else {
159             mChildren.add(index, child);
160         }
161         child.mParent = this;
162         return child;
163     }
164 
removeChild(INode node)165     public void removeChild(INode node) {
166         int index = mChildren.indexOf(node);
167         if (index != -1) {
168             removeChild(index);
169         }
170     }
171 
setAttribute(String uri, String localName, String value)172     public boolean setAttribute(String uri, String localName, String value) {
173         mAttributes.put(uri + localName, new TestAttribute(uri, localName, value));
174         return true;
175     }
176 
177     @Override
toString()178     public String toString() {
179         return "TestNode [fqn=" + mFqcn + ", infos=" + mAttributeInfos
180                 + ", attributes=" + mAttributes + ", bounds=" + mBounds + "]";
181     }
182 
getBaseline()183     public int getBaseline() {
184         return -1;
185     }
186 
getMargins()187     public Margins getMargins() {
188         return null;
189     }
190 
getAttributeSources()191     public List<String> getAttributeSources() {
192         return mAttributeSources != null ? mAttributeSources : Collections.<String>emptyList();
193     }
194 
setAttributeSources(List<String> attributeSources)195     public void setAttributeSources(List<String> attributeSources) {
196         mAttributeSources = attributeSources;
197     }
198 }