/******************************************************************************* * Copyright (c) 2011 Google, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Google, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.wb.internal.core.model.property.category; import org.eclipse.wb.internal.core.model.property.Property; import org.eclipse.wb.internal.core.utils.check.Assert; /** * Describes category of {@link Property}. * * @author scheglov_ke * @coverage core.model.property */ public final class PropertyCategory { /** * "Normal" category, used for properties that should be displayed without any effect. */ public static final PropertyCategory NORMAL = new PropertyCategory(0, "NORMAL"); /** * "Preferred" category, for properties that are most useful for component. */ public static final PropertyCategory PREFERRED = new PropertyCategory(-1, "PREFERRED"); /** * "Advanced" category, for properties that are rarely used, visible if modified, even if not * enabled. */ public static final PropertyCategory ADVANCED = new PropertyCategory(1, "ADVANCED"); /** * "Advanced" category, for properties that are rarely used, visible only if enabled. */ public static final PropertyCategory ADVANCED_REALLY = new PropertyCategory(2, "ADVANCED_REALLY"); /** * "Hidden" category, for properties that should not be displayed. */ public static final PropertyCategory HIDDEN = new PropertyCategory(3, "HIDDEN"); //////////////////////////////////////////////////////////////////////////// // // System // //////////////////////////////////////////////////////////////////////////// /** * @return the system {@link PropertyCategory} with given priority. */ public static final PropertyCategory system(int priority) { return new PropertyCategory(SYSTEM_BASE + priority, "SYSTEM:" + priority); } /** * @return the system {@link PropertyCategory} with priority * system.getPriority() + additional. */ public static final PropertyCategory system(PropertyCategory system, int additional) { Assert.isTrue(system.isSystem()); return system(system.getPriority() - SYSTEM_BASE + additional); } //////////////////////////////////////////////////////////////////////////// // // Instance fields // //////////////////////////////////////////////////////////////////////////// private static final int SYSTEM_BASE = 1000; private final int m_priority; private final String m_string; //////////////////////////////////////////////////////////////////////////// // // Constructor // //////////////////////////////////////////////////////////////////////////// private PropertyCategory(int priority, String string) { m_priority = priority; m_string = string; } //////////////////////////////////////////////////////////////////////////// // // Object // //////////////////////////////////////////////////////////////////////////// @Override public String toString() { return m_string; } @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof PropertyCategory) { PropertyCategory category = (PropertyCategory) obj; return m_priority == category.m_priority; } // unknown class return false; } @Override public int hashCode() { return m_priority; } //////////////////////////////////////////////////////////////////////////// // // Access // //////////////////////////////////////////////////////////////////////////// /** * @return true if this property is preferred. */ public boolean isPreferred() { return this == PREFERRED; } /** * @return true if this property is advanced. */ public boolean isAdvanced() { return this == ADVANCED; } /** * @return true if this property is really advanced. */ public boolean isAdvancedReally() { return this == ADVANCED_REALLY; } /** * @return true if this property is hidden. */ public boolean isHidden() { return this == HIDDEN; } /** * @return true if this property is system. */ public boolean isSystem() { return m_priority >= 900; } /** * @return the priority of this category. */ public int getPriority() { return m_priority; } }