/* * Copyright 2010-2011 Research In Motion Limited. * * Licensed 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 net.rim.tumbler.config; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.rim.tumbler.exception.ValidationException; import net.rim.tumbler.log.LogType; import net.rim.tumbler.log.Logger; import net.rim.tumbler.session.SessionManager; public class WidgetConfig { private String _content; private String _author; private String _authorEmail; private String _authorURL; private String _name; private String _version; protected int _orientation; // Portrait 0, Landscape 1 protected boolean _orientationDefined; private String _loadingScreenColour; private String _backgroundImage; private String _foregroundImage; private boolean _firstPageLoad; private boolean _remotePageLoad; private boolean _localPageLoad; private String _transitionType; private int _transitionDuration; private String _transitionDirection; private String _copyright; private String _description; private Vector<String> _hoverIconSrc; private Vector<String> _iconSrc; private String _id; private Map<String, String> _customHeaders; private String _backButton; private boolean _navigationMode; private String _contentType; private String _contentCharSet; private String _license; private String _licenseURL; private int _transportTimeout; private String[] _transportOrder; private boolean _multiAccess; private String _configXML; private Hashtable<WidgetAccess, Vector<WidgetFeature>> _accessTable; private Vector<String> _extensionClasses; private Vector<String> _extensionJSFiles; private Vector<String> _sharedGlobalJSFiles; // Cache fields private Boolean _cacheEnabled; private Boolean _aggressivelyCaching; private Integer _aggressiveCacheAge; private Integer _maxCacheable; private Integer _maxCacheSize; // Total cache size //Auto-Startup Fields private boolean _runOnStartup; private boolean _allowInvokeParams; private String _backgroundSource; private String _foregroundSource; // Debug issue private boolean _debugEnabled=false; public WidgetConfig() { // Set defaults _accessTable = new Hashtable<WidgetAccess, Vector<WidgetFeature>>(); _hoverIconSrc = new Vector<String>(); _customHeaders = new HashMap<String, String>(); _iconSrc = new Vector<String>(); _configXML = "config.xml"; _transportTimeout = -1; _backgroundImage = null; _foregroundImage = null; _firstPageLoad = false; _remotePageLoad = false; _localPageLoad = false; _transitionType = null; _transitionDuration = -1; _transitionDirection = null; _cacheEnabled = null; _aggressivelyCaching = null; _aggressiveCacheAge= null; _maxCacheable = null; _maxCacheSize = null; _orientationDefined = false; _orientation = -1; _runOnStartup=false; _allowInvokeParams=false; _backgroundSource=null; _foregroundSource=null; _debugEnabled = SessionManager.getInstance().debugMode(); } public void validate() { if (_version == null || _version.length() == 0) { Logger.logMessage(LogType.WARNING, "VALIDATION_CONFIGXML_MISSING_VERSION"); _version = "1.0.0.0"; } } public String getContent() { return _content; } public String getAuthor() { return _author; } public String getName() { return _name; } public String getVersion() { return _version; } public String getLoadingScreenColour() { return _loadingScreenColour; } public String getCopyright() { return _copyright; } public String getDescription() { return _description; } public int getOrientation() { return _orientation; } public boolean getOrientationDefined() { return _orientationDefined; } public Vector<String> getHoverIconSrc() { return _hoverIconSrc; } public Vector<String> getIconSrc() { return _iconSrc; } public void setContent(String content) { _content = content; } public void setOrientation(int value) { _orientation = value; _orientationDefined = true; } public void setAuthor(String author) { _author = author; } public void setName(String name) throws ValidationException { if (name == null || name.length() == 0) { throw new ValidationException( "EXCEPTION_CONFIGXML_MISSING_WIDGET_NAME"); } else if ( name.indexOf(",") != -1 ) { throw new ValidationException( "EXCEPTION_CONFIGXML_INVALID_WIDGET_NAME" ); } _name = name; } public void setVersion(String version) throws ValidationException { if (SessionManager.getInstance().isVerbose()) { Logger.logMessage(LogType.INFO, "PROGRESS_VALIDATING_CONFIG_XML_WIDGET_VERSION"); } // version variable should look like one of the options: // version="a.b" // version="a.b.c" // version="a.b.c.d" String regex = "\\d{1,3}\\.\\d{1,3}(\\.\\d{1,3}){0,2}$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(version); if (!matcher.matches()) { throw new ValidationException("EXCEPTION_CONFIGXML_INVALID_VERSION"); } _version = version; } public void setLoadingScreenColour(String screenColour) throws ValidationException { if (screenColour != null) { if (SessionManager.getInstance().isVerbose()) { Logger.logMessage(LogType.INFO, "PROGRESS_VALIDATING_CONFIG_XML_LOADINGSCREEN_COLOR"); } // Color variable should look like: #000000 String regex = "^#[A-Fa-f0-9]{6}$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(screenColour); if (!matcher.matches()) { throw new ValidationException( "EXCEPTION_CONFIGXML_LOADINGSCREEN_COLOUR"); } } _loadingScreenColour = screenColour; } public String getBackgroundImage() { return _backgroundImage; } public void setBackgroundImage(String src) { _backgroundImage = src; } public String getForegroundImage() { return _foregroundImage; } public void setForegroundImage(String src) { _foregroundImage = src; } public boolean getFirstPageLoad() { return _firstPageLoad; } public void setFirstPageLoad(boolean value) { _firstPageLoad = value; } public boolean getRemotePageLoad() { return _remotePageLoad; } public void setRemotePageLoad(boolean value) { _remotePageLoad = value; } public boolean getLocalPageLoad() { return _localPageLoad; } public void setLocalPageLoad(boolean value) { _localPageLoad = value; } public String getTransitionType() { return _transitionType; } public void setTransitionType(String value) { _transitionType = value; } public int getTransitionDuration() { return _transitionDuration; } public void setTransitionDuration(int value) { _transitionDuration = value; } public String getTransitionDirection() { return _transitionDirection; } public void setTransitionDirection(String value) { _transitionDirection = value; } public void setCopyright(String copyright) { _copyright = copyright; } public void setDescription(String description) { _description = description; } public void addHoverIcon(String icon) { _hoverIconSrc.add(icon); } public void addIcon(String icon) { _iconSrc.add(icon); } public String getID() { return _id; } public void setID(String id) { _id = id; } public Map<String, String> getCustomHeaders() { return _customHeaders; } public void addHeader(String key, String value) { _customHeaders.put(key, value); } public String getBackButtonBehaviour() { return _backButton; } public void setBackButtonBehaviour(String value) { _backButton = value; } public boolean getNavigationMode() { return _navigationMode; } public void setNavigationMode(boolean value) { _navigationMode = value; } public String getContentType() { return _contentType; } public String getContentCharSet() { return _contentCharSet; } public void setContentType(String type) { _contentType = type; } public void setContentCharSet(String charSet) { _contentCharSet = charSet; } public String getLicense() { return _license; } public String getLicenseURL() { return _licenseURL; } public void setLicense(String license) { _license = license; } public void setLicenseURL(String licenseurl) { _licenseURL = licenseurl; } public void setAuthorURL(String authorURL) { _authorURL = authorURL; } public String getAuthorURL() { return _authorURL; } public void setAuthorEmail(String authorEmail) { _authorEmail = authorEmail; } public String getAuthorEmail() { return _authorEmail; } public void setTransportTimeout(int transportTimeout) { _transportTimeout = transportTimeout; } public int getTransportTimeout() { return _transportTimeout; } public void setTransportOrder(String[] transportOrder) { _transportOrder = transportOrder; } public String[] getTransportOrder() { return _transportOrder; } public boolean allowMultiAccess() { return _multiAccess; } public void setMultiAccess(boolean multiAccess) { _multiAccess = multiAccess; } public String getConfigXML() { return _configXML; } public void setConfigXML(String configXML) { _configXML = configXML; } public Hashtable<WidgetAccess, Vector<WidgetFeature>> getAccessTable() { return _accessTable; } public void setAccessTable( Hashtable<WidgetAccess, Vector<WidgetFeature>> table) { _accessTable = table; } public void setExtensionClasses(Vector<String> classes) { _extensionClasses = classes; } public Vector<String> getExtensionClasses() { return _extensionClasses; } public void setExtensionJSFiles(Vector<String> extensionJSFiles) { _extensionJSFiles = extensionJSFiles; } public Vector<String> getExtensionJSFiles() { return _extensionJSFiles; } public void setSharedGlobalJSFiles(Vector<String> sharedGlobalJSFiles) { _sharedGlobalJSFiles = sharedGlobalJSFiles; } public Vector<String> getSharedGlobalJSFiles() { return _sharedGlobalJSFiles; } // Cache field functions public Boolean isCacheEnabled() { return _cacheEnabled; } public void setCacheEnabled(boolean inputValue) { _cacheEnabled = inputValue; } public Boolean isAggressiveCacheEnabled() { return _aggressivelyCaching; } private void setAggressiveCache(boolean inputValue) { _aggressivelyCaching = inputValue; } public Integer getAggressiveCacheAge() { return _aggressiveCacheAge; } public void setAggressiveCacheAge(int inputValue) { // Enable aggressive cache flag if the value is above 0 if (inputValue > 0){ setAggressiveCache(true); } else if (inputValue == -1) { setAggressiveCache(false); } // Max value is 30 days if(inputValue <= 2592000){ _aggressiveCacheAge = inputValue; } } public Integer getMaxCacheSize() { return _maxCacheSize; } public void setMaxCacheSize(int inputValue) { // Min value of 0, max value of 2048 KB final int kb_2048 = 2048 * 1024; if (inputValue >= 0 && inputValue <= (kb_2048)){ _maxCacheSize = inputValue; } else if (inputValue > kb_2048) { _maxCacheSize = kb_2048; } } public Integer getMaxCacheItemSize() { return _maxCacheable; } public void setMaxCacheItemSize(int inputValue) { // -1 is a valid value if (inputValue >= -1){ _maxCacheable = inputValue; } } //Auto-Startup Accessors and Mutators public Boolean isStartupEnabled() { return _runOnStartup; } public void setStartup(Boolean runOnStartup) { _runOnStartup = runOnStartup; } public String getBackgroundSource() { return _backgroundSource; } public String getForegroundSource() { return _foregroundSource; } public void setForegroundSource(String foregroundSource) { _foregroundSource = foregroundSource; } public void setBackgroundSource(String backgroundSource) { _backgroundSource = backgroundSource; } public Boolean allowInvokeParams() { return _allowInvokeParams; } public void setAllowInvokeParams(Boolean allowInvokeParams) { _allowInvokeParams = allowInvokeParams; } public boolean isDebugEnabled() { return _debugEnabled; } }