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.editor; 12765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 13765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyeimport java.beans.PropertyDescriptor; 14765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 15765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye/** 16765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * {@link PropertyEditorProvider} that creates editors based on {@link PropertyDescriptor} 17765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * attributes, such as "enumerationValues". 18765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * 19765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @author scheglov_ke 20765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @coverage core.model.property.editor 21765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 22765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbyepublic final class PropertyDescriptorEditorProvider extends PropertyEditorProvider { 23765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 24765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 25765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // PropertyEditorProvider 26765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 27765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 28765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye @Override 29765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye public PropertyEditor getEditorForPropertyDescriptor(PropertyDescriptor descriptor) 30765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye throws Exception { 31765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye { 32765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Object attributeValue = descriptor.getValue("enumerationValues"); 33765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (isEnumerationProperty(descriptor)) { 34765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return new EnumerationValuesPropertyEditor(attributeValue); 35765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 36765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 37765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return null; 38765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 39765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye 40765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 41765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 42765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // Utils 43765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // 44765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye //////////////////////////////////////////////////////////////////////////// 45765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye /** 46765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * @return <code>true</code> if given {@link PropertyDescriptor} has attribute "enumerationValues" 47765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye * with valid value structure. 48765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye */ 49765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye private static boolean isEnumerationProperty(PropertyDescriptor descriptor) { 50765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Object attributeValue = descriptor.getValue("enumerationValues"); 51765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // should be Object[] 52765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (!(attributeValue instanceof Object[])) { 53765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return false; 54765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 55765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Object[] enumElements = (Object[]) attributeValue; 56765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // should be multiple 3 57765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (enumElements.length % 3 != 0) { 58765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return false; 59765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 60765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // elements should be sequence of [String,Object,String] 61765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye for (int i = 0; i < enumElements.length; i++) { 62765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye Object element = enumElements[i]; 63765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (i % 3 == 0 && !(element instanceof String)) { 64765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return false; 65765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 66765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye if (i % 3 == 2 && !(element instanceof String)) { 67765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return false; 68765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 69765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 70765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye // OK 71765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye return true; 72765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye } 73765e52e2d30d0754625b8c7af6c36e93612f15beTor Norbye} 74