blob: 1455c1f6fc00144efcc6360db13f602e762cb98a [file] [log] [blame]
////////////////////////////////////////////////////////////////////////////////
//
// 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.flex.packageflexsdk.resource
{
import flash.events.Event;
import flash.events.EventDispatcher;
import flash.events.IEventDispatcher;
import flash.utils.Dictionary;
import flash.utils.Proxy;
import flash.utils.flash_proxy;
import mx.collections.ArrayCollection;
import mx.events.PropertyChangeEvent;
import mx.resources.IResourceManager;
import mx.resources.ResourceManager;
[Bindable(event="propertyChange")]
public dynamic class ViewResourceConstants extends Proxy implements IEventDispatcher
{
//--------------------------------------------------------------------------
//
// Class constants
//
//--------------------------------------------------------------------------
public static const BUNDLE_NAME:String = "resourceStrings";
public static const DEFAULT_LANGUAGE:String = "en_US";
//--------------------------------------------------------------------------
//
// Class properties
//
//--------------------------------------------------------------------------
//----------------------------------
// instance
//----------------------------------
private static var _instance:ViewResourceConstants;
public static function get instance():ViewResourceConstants
{
if (!_instance)
_instance = new ViewResourceConstants(new SE());
return _instance;
}
//--------------------------------------------------------------------------
//
// Constructor
//
//--------------------------------------------------------------------------
public function ViewResourceConstants(se:SE)
{
_eventDispatcher = new EventDispatcher();
//RuntimeLocale.instance.installResources();
}
//--------------------------------------------------------------------------
//
// Variables
//
//--------------------------------------------------------------------------
private var _content:Dictionary;
private var _eventDispatcher:EventDispatcher;
private var _resourceManager:IResourceManager = ResourceManager.getInstance();;
//--------------------------------------------------------------------------
//
// Methods
//
//--------------------------------------------------------------------------
//----------------------------------
// addEventListener
//----------------------------------
public function addEventListener(type:String, listener:Function,
useCapture:Boolean = false, priority:int = 0,
useWeakReference:Boolean = false):void
{
_eventDispatcher.addEventListener(type, listener, useCapture, priority, useWeakReference);
}
//----------------------------------
// dispatchEvent
//----------------------------------
public function dispatchEvent(event:Event):Boolean
{
return _eventDispatcher.dispatchEvent(event);
}
//----------------------------------
// hasProperty
//----------------------------------
override flash_proxy function hasProperty(name:*):Boolean
{
return _content[name] != null;
}
//----------------------------------
// getProperty
//----------------------------------
override flash_proxy function getProperty(name:*):*
{
if (!_content[name])
{
var errorString:String = "The key was not found in the resource strings (key: '" + name + "').";
trace(errorString);
throw new Error(errorString);
}
return _content[name];
}
//----------------------------------
// setProperty
//----------------------------------
override flash_proxy function setProperty(name:*, value:*):void
{
_content[name] = value;
}
//----------------------------------
// hasEventListener
//----------------------------------
public function hasEventListener(type:String):Boolean
{
return _eventDispatcher.hasEventListener(type);
}
//----------------------------------
// removeEventListener
//----------------------------------
public function removeEventListener(type:String, listener:Function,
useCapture:Boolean = false):void
{
_eventDispatcher.removeEventListener(type, listener, useCapture);
}
//----------------------------------
// update
//----------------------------------
public function update(event:Event = null):void
{
_content = new Dictionary();
var messageStringsContentDefault:Object;
var messageStringsContentLocalized:Object;
var n:int = _resourceManager.localeChain.length;
messageStringsContentDefault =
_resourceManager.getResourceBundle(_resourceManager.localeChain[n - 1], BUNDLE_NAME).content;
if (n > 1)
messageStringsContentLocalized =
_resourceManager.getResourceBundle(_resourceManager.localeChain[0], BUNDLE_NAME).content;
var useLocalizedString:Boolean;
var event:Event;
for (var key:String in messageStringsContentDefault)
{
useLocalizedString = messageStringsContentLocalized &&
messageStringsContentLocalized[key] &&
messageStringsContentLocalized[key] != "";
_content[key] = (useLocalizedString) ?
messageStringsContentLocalized[key] : messageStringsContentDefault[key];
event = PropertyChangeEvent.createUpdateEvent(this, key, "", _content[key]);
dispatchEvent(event);
}
}
//----------------------------------
// willTrigger
//----------------------------------
public function willTrigger(type:String):Boolean
{
return _eventDispatcher.willTrigger(type);
}
}
}
class SE {}