• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 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 
17 package com.android.ide.eclipse.adt.internal.resources.configurations;
18 
19 import com.android.ide.eclipse.adt.internal.editors.IconFactory;
20 
21 import org.eclipse.swt.graphics.Image;
22 
23 import java.util.regex.Matcher;
24 import java.util.regex.Pattern;
25 
26 /**
27  * Resource Qualifier for Platform Version.
28  */
29 public final class VersionQualifier extends ResourceQualifier {
30     /** Default pixel density value. This means the property is not set. */
31     private final static int DEFAULT_VERSION = -1;
32 
33     private final static Pattern sCountryCodePattern = Pattern.compile("^v(\\d+)$");//$NON-NLS-1$
34 
35     private int mVersion = DEFAULT_VERSION;
36 
37     public static final String NAME = "Platform Version";
38 
39     /**
40      * Creates and returns a qualifier from the given folder segment. If the segment is incorrect,
41      * <code>null</code> is returned.
42      * @param segment the folder segment from which to create a qualifier.
43      * @return a new {@link VersionQualifier} object or <code>null</code>
44      */
getQualifier(String segment)45     public static VersionQualifier getQualifier(String segment) {
46         Matcher m = sCountryCodePattern.matcher(segment);
47         if (m.matches()) {
48             String v = m.group(1);
49 
50             int code = -1;
51             try {
52                 code = Integer.parseInt(v);
53             } catch (NumberFormatException e) {
54                 // looks like the string we extracted wasn't a valid number.
55                 return null;
56             }
57 
58             VersionQualifier qualifier = new VersionQualifier();
59             qualifier.mVersion = code;
60             return qualifier;
61         }
62 
63         return null;
64     }
65 
66     /**
67      * Returns the folder name segment for the given value. This is equivalent to calling
68      * {@link #toString()} on a {@link VersionQualifier} object.
69      * @param version the value of the qualifier, as returned by {@link #getVersion()}.
70      */
getFolderSegment(int version)71     public static String getFolderSegment(int version) {
72         if (version != DEFAULT_VERSION) {
73             return String.format("v%1$d", version); //$NON-NLS-1$
74         }
75 
76         return ""; //$NON-NLS-1$
77     }
78 
getVersion()79     public int getVersion() {
80         return mVersion;
81     }
82 
83     @Override
getName()84     public String getName() {
85         return NAME;
86     }
87 
88     @Override
getShortName()89     public String getShortName() {
90         return "Version";
91     }
92 
93     @Override
getIcon()94     public Image getIcon() {
95         return IconFactory.getInstance().getIcon("version"); //$NON-NLS-1$
96     }
97 
98     @Override
isValid()99     public boolean isValid() {
100         return mVersion != DEFAULT_VERSION;
101     }
102 
103     @Override
hasFakeValue()104     public boolean hasFakeValue() {
105         return false;
106     }
107 
108     @Override
checkAndSet(String value, FolderConfiguration config)109     public boolean checkAndSet(String value, FolderConfiguration config) {
110         VersionQualifier qualifier = getQualifier(value);
111         if (qualifier != null) {
112             config.setVersionQualifier(qualifier);
113             return true;
114         }
115 
116         return false;
117     }
118 
119     @Override
equals(Object qualifier)120     public boolean equals(Object qualifier) {
121         if (qualifier instanceof VersionQualifier) {
122             return mVersion == ((VersionQualifier)qualifier).mVersion;
123         }
124 
125         return false;
126     }
127 
128     @Override
hashCode()129     public int hashCode() {
130         return mVersion;
131     }
132 
133     /**
134      * Returns the string used to represent this qualifier in the folder name.
135      */
136     @Override
getFolderSegment()137     public String getFolderSegment() {
138         return getFolderSegment(mVersion);
139     }
140 
141     @Override
getShortDisplayValue()142     public String getShortDisplayValue() {
143         if (mVersion != DEFAULT_VERSION) {
144             return String.format("API %1$d", mVersion);
145         }
146 
147         return ""; //$NON-NLS-1$
148     }
149 
150     @Override
getLongDisplayValue()151     public String getLongDisplayValue() {
152         if (mVersion != DEFAULT_VERSION) {
153             return String.format("API Level %1$d", mVersion);
154         }
155 
156         return ""; //$NON-NLS-1$
157     }
158 }
159