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