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.category; 12765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 13765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.Property; 14765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport org.eclipse.wb.internal.core.model.property.PropertyManager; 15765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 16765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/** 17765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Factory for {@link PropertyCategoryProvider} instances. 18765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 19765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @author scheglov_ke 20765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @coverage core.model.property 21765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 22765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic final class PropertyCategoryProviders { 23765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 24765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 25765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Simple providers 26765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 27765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 28765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private static final PropertyCategoryProvider FROM_PROPERTY = new PropertyCategoryProvider() { 29765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public PropertyCategory getCategory(Property property) { 30765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return property.getCategory(); 31765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 32765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 33765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 34765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 35765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Returns result of {@link Property#getCategory()}, never <code>null</code>. 36765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 37765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public static PropertyCategoryProvider fromProperty() { 38765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return FROM_PROPERTY; 39765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 40765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 41765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private static final PropertyCategoryProvider FORCED_BY_USER = new PropertyCategoryProvider() { 42765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public PropertyCategory getCategory(Property property) { 43765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return PropertyManager.getCategoryForced(property); 44765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 45765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 46765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 47765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 48765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Returns category forced by user, may be <code>null</code>. 49765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 50765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public static PropertyCategoryProvider forcedByUser() { 51765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return FORCED_BY_USER; 52765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 53765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 54765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 55765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 56765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Compound 57765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 58765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 59765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 60765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Returns first not <code>null</code> category returned by provider. 61765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 62765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public static PropertyCategoryProvider combine(final PropertyCategoryProvider... providers) { 63765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return new PropertyCategoryProvider() { 64765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public PropertyCategory getCategory(Property property) { 65765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye for (PropertyCategoryProvider provider : providers) { 66765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye PropertyCategory category = provider.getCategory(property); 67765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (category != null) { 68765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return category; 69765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 70765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 71765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye throw new IllegalStateException("Can not provide category for " + property.getTitle()); 72765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 73765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye }; 74765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 75765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 76765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private static final PropertyCategoryProvider DEF = combine(forcedByUser(), fromProperty()); 77765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 78765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 79765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * Returns the default combination of {@link PropertyCategoryProvider}s - first 80765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * {@link #forcedByUser()}, then {@link #fromProperty()}. 81765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 82765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public static PropertyCategoryProvider def() { 83765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return DEF; 84765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 85765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye} 86