| /* |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| |
| package org.apache.royale.compiler.internal.targets; |
| |
| import java.util.regex.Matcher; |
| import java.util.regex.Pattern; |
| |
| |
| import static org.apache.royale.compiler.mxml.IMXMLLanguageConstants.*; |
| |
| /** |
| * Base class for {@link ITargetAttributes}. Subclasses need to implement |
| * several {@code parseXXX()} methods in order to adapt the backing container to |
| * the interface APIs. |
| */ |
| abstract class TargetAttributeBase implements ITargetAttributes |
| { |
| /** |
| * valid percentage expressions are: [whitespace] positive-whole-or-decimal-number [whitespace] % [whitespace] |
| */ |
| private static final Pattern percentagePattern = Pattern.compile("\\s*((\\d+)(.(\\d)+)?)\\s*%\\s*"); |
| |
| |
| @Override |
| public Float getWidth() |
| { |
| if (isPercentage(ATTRIBUTE_WIDTH)) |
| return null; |
| |
| return parseFloat(ATTRIBUTE_WIDTH); |
| } |
| |
| @Override |
| public Float getHeight() |
| { |
| if (isPercentage(ATTRIBUTE_HEIGHT)) |
| return null; |
| |
| return parseFloat(ATTRIBUTE_HEIGHT); |
| } |
| |
| @Override |
| public Double getWidthPercentage() |
| { |
| if (!isPercentage(ATTRIBUTE_WIDTH)) |
| return null; |
| |
| return parsePercentage(ATTRIBUTE_WIDTH); |
| } |
| |
| @Override |
| public Double getHeightPercentage() |
| { |
| if (!isPercentage(ATTRIBUTE_HEIGHT)) |
| return null; |
| |
| return parsePercentage(ATTRIBUTE_HEIGHT); |
| } |
| |
| @Override |
| public String getBackgroundColor() |
| { |
| return parseString(ATTRIBUTE_BACKGROUND_COLOR); |
| } |
| |
| @Override |
| public Float getFrameRate() |
| { |
| return parseFloat(ATTRIBUTE_FRAME_RATE); |
| } |
| |
| @Override |
| public String getPreloaderClassName() |
| { |
| return parseString(ATTRIBUTE_PRELOADER); |
| } |
| |
| @Override |
| public String getRuntimeDPIProviderClassName() |
| { |
| return parseString(ATTRIBUTE_RUNTIME_DPI_PROVIDER); |
| } |
| |
| @Override |
| public Integer getScriptRecursionLimit() |
| { |
| return parseInteger(ATTRIBUTE_SCRIPT_RECURSION_LIMIT); |
| } |
| |
| @Override |
| public Integer getScriptTimeLimit() |
| { |
| return parseInteger(ATTRIBUTE_SCRIPT_TIME_LIMIT); |
| } |
| |
| @Override |
| public String getSplashScreenImage() |
| { |
| return parseString(ATTRIBUTE_SPLASH_SCREEN_IMAGE); |
| } |
| |
| @Override |
| public String getPageTitle() |
| { |
| return parseString(ATTRIBUTE_PAGE_TITLE); |
| } |
| |
| @Override |
| public Boolean getUseDirectBlit() |
| { |
| return parseBoolean(ATTRIBUTE_USE_DIRECT_BLIT); |
| } |
| |
| @Override |
| public Boolean getUseGPU() |
| { |
| return parseBoolean(ATTRIBUTE_USE_GPU); |
| } |
| |
| @Override |
| public Boolean getUsePreloader() |
| { |
| return parseBoolean(ATTRIBUTE_USE_PRELOADER); |
| } |
| |
| /** |
| * Parse the value of the given value and check if it's a percentage value. |
| * |
| * @param value value string |
| * @return true if a percentage value, or false if not |
| */ |
| final boolean isPercentageValue(final String value) |
| { |
| assert (value != null) : "isPercentageValue called on a null value"; |
| |
| if (value.indexOf('%') >= 0) |
| return true; |
| else |
| return false; |
| } |
| |
| /** |
| * Parse the value of the given key as a percentage value. |
| * |
| * @param value value string |
| * @return percentage value or null not a valid percentage |
| */ |
| final Double parsePercentageValue(final String value) |
| { |
| assert (value != null) : "parsePercentageValue called on a null value"; |
| |
| Matcher m = percentagePattern.matcher(value); |
| |
| if (m.matches()) |
| return Double.valueOf(m.group(1)); |
| else |
| return null; |
| } |
| |
| /** |
| * Parse the value of the given key as a Boolean. |
| * |
| * @param key Attribute name. |
| * @return Boolean value or null if {@code key} isn't in the map. |
| */ |
| abstract Boolean parseBoolean(final String key); |
| |
| /** |
| * Parse the value of the given key as a Float. |
| * |
| * @param key Attribute name. |
| * @return Float value or null if {@code key} isn't in the map. |
| */ |
| abstract Float parseFloat(final String key); |
| |
| /** |
| * Parse the value of the given key as a Integer. |
| * |
| * @param key Attribute name. |
| * @return Integer value or null if {@code key} isn't in the map. |
| */ |
| abstract Integer parseInteger(final String key); |
| |
| /** |
| * Parse the value of the given key as a String. |
| * |
| * @param key Attribute name. |
| * @return String value or null if {@code key} isn't in the map. |
| */ |
| abstract String parseString(final String key); |
| |
| /** |
| * Parse the value of the given key as a Percentage. |
| * |
| * @param key Attribute name. |
| * @return Percentage value or null if {@code key} isn't in the map. |
| */ |
| abstract Double parsePercentage(final String key); |
| |
| /** |
| * Parse the value of the given key and check if it's a percentage value. |
| * |
| * @param key Attribute name. |
| * @return true if a percentage value, or false if not or if {@code key} |
| * isn't in the map. |
| */ |
| abstract boolean isPercentage(final String key); |
| } |