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.SdkConstants.ANDROID_URI; 19 import static com.android.SdkConstants.ATTR_ID; 20 21 import com.android.annotations.NonNull; 22 import com.android.annotations.Nullable; 23 import com.android.ide.common.api.IDragElement; 24 import com.android.ide.common.api.INode; 25 import com.android.ide.common.api.Rect; 26 27 import java.util.ArrayList; 28 import java.util.HashMap; 29 import java.util.List; 30 import java.util.Map; 31 32 /** Test/mock implementation of {@link IDragElement} */ 33 public class TestDragElement implements IDragElement { 34 private Rect mRect; 35 36 private final String mFqcn; 37 38 private Map<String, TestAttribute> mAttributes = new HashMap<String, TestAttribute>(); 39 40 private List<TestDragElement> mChildren = new ArrayList<TestDragElement>(); 41 42 private TestDragElement mParent; 43 44 public TestDragElement(String mFqcn, Rect mRect, List<TestDragElement> mChildren, 45 TestDragElement mParent) { 46 super(); 47 this.mRect = mRect; 48 this.mFqcn = mFqcn; 49 this.mChildren = mChildren; 50 this.mParent = mParent; 51 } 52 53 public TestDragElement(String fqn) { 54 this(fqn, null, null, null); 55 } 56 57 public TestDragElement setBounds(Rect bounds) { 58 this.mRect = bounds; 59 60 return this; 61 } 62 63 // Builder stuff 64 public TestDragElement set(String uri, String name, String value) { 65 if (mAttributes == null) { 66 mAttributes = new HashMap<String, TestAttribute>(); 67 } 68 69 mAttributes.put(uri + name, new TestAttribute(uri, name, value)); 70 71 return this; 72 } 73 74 public TestDragElement add(TestDragElement... children) { 75 if (mChildren == null) { 76 mChildren = new ArrayList<TestDragElement>(); 77 } 78 79 for (TestDragElement child : children) { 80 mChildren.add(child); 81 child.mParent = this; 82 } 83 84 return this; 85 } 86 87 public TestDragElement id(String id) { 88 return set(ANDROID_URI, ATTR_ID, id); 89 } 90 91 public static TestDragElement create(String fqn, Rect bounds) { 92 return create(fqn).setBounds(bounds); 93 } 94 95 public static TestDragElement create(String fqn) { 96 return new TestDragElement(fqn); 97 } 98 99 public static IDragElement[] create(TestDragElement... elements) { 100 return elements; 101 } 102 103 // ==== IDragElement ==== 104 105 @Override 106 public IDragAttribute getAttribute(@Nullable String uri, @NonNull String localName) { 107 if (mAttributes == null) { 108 return new TestAttribute(uri, localName, ""); 109 } 110 111 return mAttributes.get(uri + localName); 112 } 113 114 @Override 115 public @NonNull IDragAttribute[] getAttributes() { 116 return mAttributes.values().toArray(new IDragAttribute[mAttributes.size()]); 117 } 118 119 @Override 120 public @NonNull Rect getBounds() { 121 return mRect; 122 } 123 124 @Override 125 public @NonNull String getFqcn() { 126 return mFqcn; 127 } 128 129 @Override 130 public @NonNull IDragElement[] getInnerElements() { 131 if (mChildren == null) { 132 return new IDragElement[0]; 133 } 134 135 return mChildren.toArray(new IDragElement[mChildren.size()]); 136 } 137 138 @Override 139 public @NonNull Rect getParentBounds() { 140 return mParent != null ? mParent.getBounds() : null; 141 } 142 143 @Override 144 public String getParentFqcn() { 145 return mParent != null ? mParent.getFqcn() : null; 146 } 147 148 @Override 149 public String toString() { 150 return "TestDragElement [fqn=" + mFqcn + ", attributes=" + mAttributes + ", bounds=" 151 + mRect + "]"; 152 } 153 154 @Override 155 public boolean isSame(INode node) { 156 return node.getBounds().equals(getBounds()); 157 } 158 } 159