Merging from head
[beagle.git] / Tiles / HitFlavor.cs
blob1a3c84a2dfea4d4745b4d15eb305af2b3d3d3214
1 //
2 // HitFlavor.cs
3 //
4 // Copyright (C) 2004 Novell, Inc.
5 //
7 //
8 // Permission is hereby granted, free of charge, to any person obtaining a
9 // copy of this software and associated documentation files (the "Software"),
10 // to deal in the Software without restriction, including without limitation
11 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
12 // and/or sell copies of the Software, and to permit persons to whom the
13 // Software is furnished to do so, subject to the following conditions:
15 // The above copyright notice and this permission notice shall be included in
16 // all copies or substantial portions of the Software.
18 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
24 // DEALINGS IN THE SOFTWARE.
27 using System;
29 using BU = Beagle.Util;
31 namespace Beagle.Tile {
33 [AttributeUsage (AttributeTargets.Class, AllowMultiple=true)]
34 public class HitFlavor : Attribute {
36 public string Name;
37 public string Emblem;
38 public string Color;
39 public int Columns = 3;
40 public int Rank = 0;
41 public Type TileType;
43 private string uri;
44 private string type;
45 private string mimeType;
46 private string source;
48 public string Uri {
49 get { return uri; }
50 set { uri = IsWild (value) ? null : value; }
53 public string Type {
54 get { return type; }
55 set { type = IsWild (value) ? null : value; }
58 public string MimeType {
59 get { return mimeType; }
60 set { mimeType = IsWild (value) ? null : value; }
63 public string Source {
64 get { return source; }
65 set { source = IsWild (value) ? null : value; }
68 private bool IsWild (string str)
70 if (str == null)
71 return true;
72 if (str == "")
73 return false;
74 foreach (char c in str)
75 if (c != '*')
76 return false;
77 return true;
80 public bool IsMatch (Hit hit)
82 return (Uri == null || BU.StringFu.GlobMatch (Uri, hit.Uri.ToString ()))
83 && (Type == null || BU.StringFu.GlobMatch (Type, hit.Type))
84 && (MimeType == null || BU.StringFu.GlobMatch (MimeType, hit.MimeType))
85 && (Source == null || BU.StringFu.GlobMatch (Source, hit.Source));
88 public int Weight {
89 get {
90 int weight = 0;
92 if (Source != null)
93 weight += 8;
94 if (Type != null)
95 weight += 4;
96 if (MimeType != null)
97 weight += 2;
98 if (Uri != null)
99 weight += 1;
101 return weight;
105 override public string ToString ()
107 string str = "";
108 if (Uri != null)
109 str += " Uri=" + Uri;
110 if (Type != null)
111 str += " Type=" + Type;
112 if (MimeType != null)
113 str += " MimeType=" + MimeType;
114 if (Source != null)
115 str += " Source=" + Source;
116 return "HitFlavor (" + str.Trim () + ")";