1765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/******************************************************************************* 2765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Copyright (c) 2011 Google, Inc. 3765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * All rights reserved. This program and the accompanying materials 4765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * are made available under the terms of the Eclipse Public License v1.0 5765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * which accompanies this distribution, and is available at 6765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * http://www.eclipse.org/legal/epl-v10.html 7765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 8765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Contributors: 9765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Google, Inc. - initial API and implementation 10765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye *******************************************************************************/ 11765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepackage org.eclipse.wb.internal.core.model.property; 12765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 13765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport com.google.common.collect.Maps; 14765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 15765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.category.PropertyCategory; 16765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.editor.PropertyEditor; 17765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 18765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport java.util.Comparator; 19765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport java.util.Map; 20765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 21765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/** 22765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * {@link Property} is used to display/change properties of ObjectInfo's. 23765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 24765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @author scheglov_ke 25765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @coverage core.model.property 26765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 27765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic abstract class Property { 28765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 29765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * The value that should be used when we don't know real value of {@link Property}. We can not use 30765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * <code>null</code> because <code>null</code> can be valid value. 31765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 32765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public static final Object UNKNOWN_VALUE = new Object() { 33765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 34765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public String toString() { 35765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return "UNKNOWN_VALUE"; 36765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 37765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 38765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 39765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 40765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Instance fields 41765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 42765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 43765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye protected final PropertyEditor m_editor; 44765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 45765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 46765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 47765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Constructor 48765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 49765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 50765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public Property(PropertyEditor editor) { 51765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_category = PropertyCategory.NORMAL; 52765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_editor = editor; 53765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 54765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 55765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 56765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 57765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Presentation 58765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 59765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 60765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 61765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return the title displayed to the user to identify the property. 62765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 63765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public abstract String getTitle(); 64765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 65765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 66765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return <code>true</code> if this property has a non-default value 67765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 68765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public abstract boolean isModified() throws Exception; 69765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 70765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 71765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 72765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Category 73765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 74765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 75765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private PropertyCategory m_category; 76765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 77765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 78765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return current {@link PropertyCategory}. 79765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 80765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public final PropertyCategory getCategory() { 81765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return m_category; 82765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 83765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 84765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 85765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Sets the {@link PropertyCategory} for this {@link Property}. 86765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 87765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public final void setCategory(PropertyCategory category) { 88765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_category = category; 89765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 90765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 91765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 92765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 93765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Value 94765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 95765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 96765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 97765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return the current value of this {@link Property} or {@link #UNKNOWN_VALUE}. 98765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 99765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public abstract Object getValue() throws Exception; 100765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 101765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 102765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Sets the new value of this {@link Property}. 103765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 104765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @param the 105765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * new value of {@link Property} or {@link #UNKNOWN_VALUE} if {@link Property} 106765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * modification should be removed. 107765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 108765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public abstract void setValue(Object value) throws Exception; 109765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 110765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 111765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 112765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Editor 113765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 114765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 115765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 116765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return the {@link PropertyEditor}. 117765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 118765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public final PropertyEditor getEditor() { 119765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return m_editor; 120765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 121765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 122765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 123765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 124765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Composite 125765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 126765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 127765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 128765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return the composite {@link Property} for given array of {@link Property}'s or 129765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * <code>null</code> if no composite {@link Property} can be created. 130765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 131765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public Property getComposite(Property[] properties) { 132765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return null; 133765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 134765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 135765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public <T> T getAdapter(Class<T> adapter) { 136765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return null; 137765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 138765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 139765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 140765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 141765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Arbitrary values map 142765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 143765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 144765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private Map<Object, Object> m_arbitraryMap; 145765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 146765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 147765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Associates the given value with the given key. 148765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 149765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public final void putArbitraryValue(Object key, Object value) { 150765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (m_arbitraryMap == null) { 151765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_arbitraryMap = Maps.newHashMap(); 152765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 153765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_arbitraryMap.put(key, value); 154765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 155765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 156765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 157765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return the value to which the given key is mapped, or <code>null</code>. 158765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 159765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public final Object getArbitraryValue(Object key) { 160765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (m_arbitraryMap != null) { 161765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return m_arbitraryMap.get(key); 162765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 163765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return null; 164765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 165765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 166765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 167765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Removes the mapping for a key. 168765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 169765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public final void removeArbitraryValue(Object key) { 170765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (m_arbitraryMap != null) { 171765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye m_arbitraryMap.remove(key); 172765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 173765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 174765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 175765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // BEGIN ADT MODIFICATIONS 176765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 177765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 178765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Returns the name of the property (which is not always the same as the 179765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * title; for example, the "maxWidth" property has title "Max Width" and 180765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * name "maxWidth". 181765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * <p> 182765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * This is shown in tooltips to users etc to make it clear what they should 183765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * use in their own code. 184765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 185765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return the name of the property 186765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 187765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public String getName() { 188765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return getTitle(); 189765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 190765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 191765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private int mPriority; 192765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 193765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 194765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Gets the custom sort priority of this property 195765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 196765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return the sort priority 197765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 198765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public int getPriority() { 199765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return mPriority; 200765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 201765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 202765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 203765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Sets the custom sort priority of this property 204765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 205765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @param priority the new priority to use 206765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 207765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public void setPriority(int priority) { 208765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye this.mPriority = priority; 209765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 210765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 211765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** Sort {@link Property} instances alphabetically by property name */ 212765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public static final Comparator<Property> ALPHABETICAL = new Comparator<Property>() { 213765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 214765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public int compare(Property p1, Property p2) { 215765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return p1.getName().compareTo(p2.getName()); 216765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 217765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 218765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 219765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** Sort {@link Property} instances by priority */ 220765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public static final Comparator<Property> PRIORITY = new Comparator<Property>() { 221765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 222765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public int compare(Property p1, Property p2) { 223765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye int delta = p1.mPriority - p2.mPriority; 224765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (delta != 0) { 225765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return delta; 226765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 227765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 228765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return p1.getName().compareTo(p2.getName()); 229765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 230765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 231765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // END ADT MODIFICATIONS 232765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye} 233