/* * @author Galaburda Oleg a_[w] * http://actualwave.com/ * */ class aw.template.MimeType extends Object{ static public var applyAnyTypeMark:Boolean = MimeType.APPLY_ANY_TYPE_MARK_DEF; static private var _mainSpacer:String = '/'; static private var _spacer:String = '-'; static private var _anyType:String = '*'; static private var _anyMimeType:String = '*/*'; static private var _mimeTypeProp:String = 'mimeType'; public var anyTypeMark:Boolean; private var _primary:String; private var _secondary:Array; function MimeType(str:Object){ super(); unserialize(str ? str.toString() : _anyMimeType); anyTypeMark = applyAnyTypeMark; } private function unserialize(type:String):Void{ var t:Array = type.split(_mainSpacer); this._primary = t[0] this._secondary = t[1].split(_spacer); } public function compareTo(type, wSec:Boolean, level:Number):Boolean{ var alen:Number = arguments.length; if(alen<2) wSec = true; if(alen<3) level = 0; return MimeType.compare(this, type, wSec, level); } public function get primary():String{ return this._primary; } public function get secondary():Array{ return this._secondary; } public function get secondaryString():String{ return this._secondary.join(_spacer); } public function toString():String{ return this._primary+_mainSpacer+this._secondary.join(_spacer); } public function valueOf():String{ return this.toString(); } static public function compare(m1:Object, m2:Object, wSec:Boolean, sLev:Number):Boolean{ var alen:Number = arguments.length; if(alen<3) wSec = true; if(alen<4) sLev = 0; if(!(m1 instanceof MimeType)) m1 = new MimeType(m1, true); if(!(m2 instanceof MimeType)) m2 = new MimeType(m2, true); var any:Boolean = (m1.anyTypeMark && m2.anyTypeMark) ? true : false; if(any && (m1.toString()==_anyMimeType || m2.toString()==_anyMimeType)) return true; if(!isEqualParts(m1.primary.split(_spacer), m2.primary.split(_spacer), 0, any)) return false; if(wSec){ if(!isEqualParts(m1.secondary, m2.secondary, sLev, any)) return false; } return true; } static private function isEqualParts(m1:Array, m2:Array, lev:Number, any:Boolean):Boolean{ var ret:Boolean = true; var i:Number; var l1:Number = m1.length; var l2:Number = m2.length; if(!lev) lev = Math.max(l1, l2); var p1:String; var p2:String; if(any){ var a1:Boolean = false; var a2:Boolean = false; for(i=0; i