IAttributeInfo.java revision a7621238bf0202419677380ee3a268142358df83
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
17package com.android.ide.common.api;
18
19import com.android.annotations.NonNull;
20import com.android.annotations.Nullable;
21import com.android.resources.ResourceType;
22import com.google.common.annotations.Beta;
23
24import java.util.EnumSet;
25
26/**
27 * Information about an attribute as gathered from the attrs.xml file where
28 * the attribute was declared. This must include a format (string, reference, float, etc.),
29 * possible flag or enum values, whether it's deprecated and its javadoc.
30 * <p>
31 * <b>NOTE: This is not a public or final API; if you rely on this be prepared
32 * to adjust your code for the next tools release.</b>
33 * </p>
34 */
35@Beta
36public interface IAttributeInfo {
37
38    /** An attribute format, e.g. string, reference, float, etc. */
39    public enum Format {
40        STRING,
41        BOOLEAN,
42        INTEGER,
43        FLOAT,
44        COLOR,
45        DIMENSION,
46        FRACTION,
47        ENUM,
48        FLAG,
49        REFERENCE;
50
51        public static final EnumSet<Format> NONE = EnumSet.noneOf(Format.class);
52        public static final EnumSet<Format> FLAG_SET = EnumSet.of(FLAG);
53        public static final EnumSet<Format> ENUM_SET = EnumSet.of(ENUM);
54        public static final EnumSet<Format> COLOR_SET = EnumSet.of(COLOR);
55        public static final EnumSet<Format> STRING_SET = EnumSet.of(STRING);
56        public static final EnumSet<Format> BOOLEAN_SET = EnumSet.of(BOOLEAN);
57        public static final EnumSet<Format> INTEGER_SET = EnumSet.of(INTEGER);
58        public static final EnumSet<Format> FLOAT_SET = EnumSet.of(FLOAT);
59        public static final EnumSet<Format> DIMENSION_SET = EnumSet.of(DIMENSION);
60        public static final EnumSet<Format> REFERENCE_SET = EnumSet.of(REFERENCE);
61
62        /**
63         * Returns an EnumSet containing only this format (which should not be
64         * modified by the client)
65         *
66         * @return a new enum set containing exactly this format
67         */
68        @NonNull
69        public EnumSet<Format> asSet() {
70            switch (this) {
71                case BOOLEAN:
72                    return BOOLEAN_SET;
73                case COLOR:
74                    return COLOR_SET;
75                case DIMENSION:
76                    return DIMENSION_SET;
77                case ENUM:
78                    return ENUM_SET;
79                case FLAG:
80                    return FLAG_SET;
81                case FLOAT:
82                    return FLOAT_SET;
83                case INTEGER:
84                    return INTEGER_SET;
85                case STRING:
86                    return STRING_SET;
87                case REFERENCE:
88                    return REFERENCE_SET;
89                case FRACTION:
90                default:
91                    return EnumSet.of(this);
92            }
93        }
94
95        /** Returns the corresponding resource type for this attribute info,
96         * or null if there is no known or corresponding resource type (such as for
97         * enums and flags)
98         *
99         * @return the corresponding resource type, or null
100         */
101        @Nullable
102        public ResourceType getResourceType() {
103            switch (this) {
104                case STRING:
105                    return ResourceType.STRING;
106                case BOOLEAN:
107                    return ResourceType.BOOL;
108                case COLOR:
109                    return ResourceType.COLOR;
110                case DIMENSION:
111                    return ResourceType.DIMEN;
112                case FRACTION:
113                    return ResourceType.FRACTION;
114                case INTEGER:
115                    return ResourceType.INTEGER;
116
117                // No direct corresponding resource type
118                case ENUM:
119                case FLAG:
120                case FLOAT:
121                case REFERENCE:
122                    return null;
123            }
124
125            return null;
126        }
127    }
128
129    /** Returns the XML Name of the attribute */
130    @NonNull
131    public String getName();
132
133    /** Returns the formats of the attribute. Cannot be null.
134     *  Should have at least one format. */
135    @NonNull
136    public EnumSet<Format> getFormats();
137
138    /** Returns the values for enums. null for other types. */
139    @Nullable
140    public String[] getEnumValues();
141
142    /** Returns the values for flags. null for other types. */
143    @Nullable
144    public String[] getFlagValues();
145
146    /** Returns a short javadoc, .i.e. the first sentence. */
147    @NonNull
148    public String getJavaDoc();
149
150    /** Returns the documentation for deprecated attributes. Null if not deprecated. */
151    @Nullable
152    public String getDeprecatedDoc();
153
154    /** Returns the fully qualified class name of the view defining this attribute */
155    @NonNull
156    public String getDefinedBy();
157}
158