• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*******************************************************************************
2  * Copyright (c) 2011 Google, Inc.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  *    Google, Inc. - initial API and implementation
10  *******************************************************************************/
11 package org.eclipse.wb.internal.core.model.property.category;
12 
13 import org.eclipse.wb.internal.core.model.property.Property;
14 import org.eclipse.wb.internal.core.utils.check.Assert;
15 
16 /**
17  * Describes category of {@link Property}.
18  *
19  * @author scheglov_ke
20  * @coverage core.model.property
21  */
22 public final class PropertyCategory {
23   /**
24    * "Normal" category, used for properties that should be displayed without any effect.
25    */
26   public static final PropertyCategory NORMAL = new PropertyCategory(0, "NORMAL");
27   /**
28    * "Preferred" category, for properties that are most useful for component.
29    */
30   public static final PropertyCategory PREFERRED = new PropertyCategory(-1, "PREFERRED");
31   /**
32    * "Advanced" category, for properties that are rarely used, visible if modified, even if not
33    * enabled.
34    */
35   public static final PropertyCategory ADVANCED = new PropertyCategory(1, "ADVANCED");
36   /**
37    * "Advanced" category, for properties that are rarely used, visible only if enabled.
38    */
39   public static final PropertyCategory ADVANCED_REALLY = new PropertyCategory(2, "ADVANCED_REALLY");
40   /**
41    * "Hidden" category, for properties that should not be displayed.
42    */
43   public static final PropertyCategory HIDDEN = new PropertyCategory(3, "HIDDEN");
44 
45   ////////////////////////////////////////////////////////////////////////////
46   //
47   // System
48   //
49   ////////////////////////////////////////////////////////////////////////////
50   /**
51    * @return the system {@link PropertyCategory} with given priority.
52    */
system(int priority)53   public static final PropertyCategory system(int priority) {
54     return new PropertyCategory(SYSTEM_BASE + priority, "SYSTEM:" + priority);
55   }
56 
57   /**
58    * @return the system {@link PropertyCategory} with priority
59    *         <code>system.getPriority() + additional</code>.
60    */
system(PropertyCategory system, int additional)61   public static final PropertyCategory system(PropertyCategory system, int additional) {
62     Assert.isTrue(system.isSystem());
63     return system(system.getPriority() - SYSTEM_BASE + additional);
64   }
65 
66   ////////////////////////////////////////////////////////////////////////////
67   //
68   // Instance fields
69   //
70   ////////////////////////////////////////////////////////////////////////////
71   private static final int SYSTEM_BASE = 1000;
72   private final int m_priority;
73   private final String m_string;
74 
75   ////////////////////////////////////////////////////////////////////////////
76   //
77   // Constructor
78   //
79   ////////////////////////////////////////////////////////////////////////////
PropertyCategory(int priority, String string)80   private PropertyCategory(int priority, String string) {
81     m_priority = priority;
82     m_string = string;
83   }
84 
85   ////////////////////////////////////////////////////////////////////////////
86   //
87   // Object
88   //
89   ////////////////////////////////////////////////////////////////////////////
90   @Override
toString()91   public String toString() {
92     return m_string;
93   }
94 
95   @Override
equals(Object obj)96   public boolean equals(Object obj) {
97     if (obj == this) {
98       return true;
99     }
100     if (obj instanceof PropertyCategory) {
101       PropertyCategory category = (PropertyCategory) obj;
102       return m_priority == category.m_priority;
103     }
104     // unknown class
105     return false;
106   }
107 
108   @Override
hashCode()109   public int hashCode() {
110     return m_priority;
111   }
112 
113   ////////////////////////////////////////////////////////////////////////////
114   //
115   // Access
116   //
117   ////////////////////////////////////////////////////////////////////////////
118   /**
119    * @return <code>true</code> if this property is preferred.
120    */
isPreferred()121   public boolean isPreferred() {
122     return this == PREFERRED;
123   }
124 
125   /**
126    * @return <code>true</code> if this property is advanced.
127    */
isAdvanced()128   public boolean isAdvanced() {
129     return this == ADVANCED;
130   }
131 
132   /**
133    * @return <code>true</code> if this property is really advanced.
134    */
isAdvancedReally()135   public boolean isAdvancedReally() {
136     return this == ADVANCED_REALLY;
137   }
138 
139   /**
140    * @return <code>true</code> if this property is hidden.
141    */
isHidden()142   public boolean isHidden() {
143     return this == HIDDEN;
144   }
145 
146   /**
147    * @return <code>true</code> if this property is system.
148    */
isSystem()149   public boolean isSystem() {
150     return m_priority >= 900;
151   }
152 
153   /**
154    * @return the priority of this category.
155    */
getPriority()156   public int getPriority() {
157     return m_priority;
158   }
159 }
160